如何使用QFontDatabase为QComboBox填充系统全部字体?
如何将系统所有字体添加到QComboBox中
你想的没错,QFontDatabase就是实现这个需求的核心类,它能直接获取系统中安装的所有字体,下面分C++和Python(PyQt/PySide)两种常用场景给出实现代码:
C++ 实现步骤
- 调用
QFontDatabase::families()静态方法获取系统所有字体家族列表 - 将列表直接添加到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
相关产品推荐
相关产品推荐

