You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用QFontDatabase为QComboBox填充系统全部字体?

如何将系统所有字体添加到QComboBox中

你想的没错,QFontDatabase就是实现这个需求的核心类,它能直接获取系统中安装的所有字体,下面分C++和Python(PyQt/PySide)两种常用场景给出实现代码:

C++ 实现步骤

  1. 调用QFontDatabase::families()静态方法获取系统所有字体家族列表
  2. 将列表直接添加到QComboBox中
#include <QComboBox>
#include <QFontDatabase>

// 在你的窗口类初始化代码中:
QComboBox *fontCombo = new QComboBox(this);
// 获取系统所有字体家族
QStringList fontFamilies = QFontDatabase::families();
// 添加到下拉框
fontCombo->addItems(fontFamilies);

// 可选:设置默认选中当前应用字体
QString currentFont = QApplication::font().family();
int index = fontCombo->findText(currentFont);
if (index != -1) {
    fontCombo->setCurrentIndex(index);
}

Python(PyQt/PySide)实现步骤

逻辑和C++一致,调用QFontDatabase.families()获取字体列表后添加到下拉框

from PyQt5.QtWidgets import QComboBox, QApplication
from PyQt5.QtGui import QFontDatabase
# 或者用PySide2/PySide6,导入路径对应调整

app = QApplication([])
font_combo = QComboBox()
# 获取系统所有字体家族
font_families = QFontDatabase.families()
# 添加到下拉框
font_combo.addItems(font_families)

# 可选:设置默认选中当前应用字体
current_font = QApplication.font().family()
index = font_combo.findText(current_font)
if index != -1:
    font_combo.setCurrentIndex(index)

font_combo.show()
app.exec_()

补充说明

  • families()方法返回的是字体家族名称(比如"微软雅黑"、"Arial"),同一个家族下的不同字重、样式(如粗体、斜体)会归为同一条目,后续可以通过QFontDatabase获取该家族下的具体样式
  • 如果需要获取包含样式的完整字体名称(比如"Arial Bold"),可以改用QFontDatabase::allFonts()方法,遍历每个字体对象的family()和styleName()组合后添加

内容的提问来源于stack exchange,提问作者why

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.24 08:22:05