QFontDatabase Class
QFontDatabase 类提供了有关底层窗口系统中可用字体的信息。更多内容...
| 头文件: | #include <QFontDatabase> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
注意:该类中的所有函数均是线程安全的。
公共类型
| enum | SystemFont { GeneralFont, FixedFont, TitleFont, SmallestReadableFont } |
| enum | WritingSystem { Any, Latin, Greek, Cyrillic, Armenian, …, Nko } |
静态公共成员
(since 6.9) void | addApplicationEmojiFontFamily(const QString &familyName) |
(since 6.8) void | addApplicationFallbackFontFamily(QChar::Script script, const QString &familyName) |
| int | addApplicationFont(const QString &fileName) |
| int | addApplicationFontFromData(const QByteArray &fontData) |
(since 6.9) QStringList | applicationEmojiFontFamilies() |
(since 6.8) QStringList | applicationFallbackFontFamilies(QChar::Script script) |
| QStringList | applicationFontFamilies(int id) |
| bool | bold(const QString &family, const QString &style) |
| QStringList | families(QFontDatabase::WritingSystem writingSystem = Any) |
| QFont | font(const QString &family, const QString &style, int pointSize) |
| bool | isBitmapScalable(const QString &family, const QString &style = QString()) |
| bool | isFixedPitch(const QString &family, const QString &style = QString()) |
| bool | isPrivateFamily(const QString &family) |
| bool | isScalable(const QString &family, const QString &style = QString()) |
| bool | isSmoothlyScalable(const QString &family, const QString &style = QString()) |
| bool | italic(const QString &family, const QString &style) |
| QList<int> | pointSizes(const QString &family, const QString &styleName = QString()) |
| bool | removeAllApplicationFonts() |
(since 6.9) bool | removeApplicationEmojiFontFamily(const QString &familyName) |
(since 6.8) bool | removeApplicationFallbackFontFamily(QChar::Script script, const QString &familyName) |
| bool | removeApplicationFont(int id) |
(since 6.9) void | setApplicationEmojiFontFamilies(const QStringList &familyNames) |
(since 6.8) void | setApplicationFallbackFontFamilies(QChar::Script script, const QStringList &familyNames) |
| QList<int> | smoothSizes(const QString &family, const QString &styleName) |
| QList<int> | standardSizes() |
| QString | styleString(const QFont &font) |
| QString | styleString(const QFontInfo &fontInfo) |
| QStringList | styles(const QString &family) |
| QFont | systemFont(QFontDatabase::SystemFont type) |
| int | weight(const QString &family, const QString &style) |
| QString | writingSystemName(QFontDatabase::WritingSystem writingSystem) |
| QString | writingSystemSample(QFontDatabase::WritingSystem writingSystem) |
| QList<QFontDatabase::WritingSystem> | writingSystems() |
| QList<QFontDatabase::WritingSystem> | writingSystems(const QString &family) |
详细说明
该类的最常见用途是查询数据库,以获取字体列表families(),以及每个字体家族可用的pointSizes() 和styles()。pointSizes() 的替代方法是smoothSizes(),该方法返回给定字体家族和样式看起来最美观的字号。
如果某个字体家族由两个或多个字体厂商提供,则家族名称中会包含厂商名称;例如:“Helvetica [Adobe]”和“Helvetica [Cronyx]”。 指定字体家族时,既可以使用旧式的带连字符的“字体厂商-字体家族”格式,也可以使用带方括号的“字体家族 [字体厂商]”格式;例如:“Cronyx-Helvetica”或“Helvetica [Cronyx]”。 如果字体家族有字体厂商,则始终使用方括号格式返回,families() 返回的值也是如此。
font() 函数根据字体家族、样式和点大小返回一个QFont 。
可以检查字体家族和字体的组合,以确定它是italic() 还是bold(),并检索其weight()。同样,我们可以调用isBitmapScalable()、isSmoothlyScalable()、isScalable() 和isFixedPitch()。
使用styleString() 获取字体的文本描述。
QFontDatabase 类提供了一些辅助函数,例如standardSizes()。您可以使用writingSystemName() 检索某种书写系统的描述,并使用writingSystemSample() 获取该书写系统中字符的示例。
示例:
QTreeWidget fontTree;
fontTree.setColumnCount(2);
fontTree.setHeaderLabels(QStringList() << "Font" << "Smooth Sizes");
const QStringList fontFamilies = QFontDatabase::families();
for (const QString &family : fontFamilies) {
QTreeWidgetItem *familyItem = new QTreeWidgetItem(&fontTree);
familyItem->setText(0, family);
const QStringList fontStyles = QFontDatabase::styles(family);
for (const QString &style : fontStyles) {
QTreeWidgetItem *styleItem = new QTreeWidgetItem(familyItem);
styleItem->setText(0, style);
QString sizes;
const QList<int> smoothSizes = QFontDatabase::smoothSizes(family, style);
for (const auto &points : smoothSizes)
sizes += QString::number(points) + ' ';
styleItem->setText(1, sizes.trimmed());
}
}此示例获取字体家族列表、每个家族的样式列表,以及每个家族与样式组合可用的点大小,并将这些信息显示在树形视图中。
另请参阅 QFont 、QFontInfo 以及QFontMetrics 。
成员类型文档
enum QFontDatabase::SystemFont
| 常数 | 值 | 描述 |
|---|---|---|
QFontDatabase::GeneralFont | 0 | 默认系统字体。 |
QFontDatabase::FixedFont | 1 | 系统推荐的固定字体。 |
QFontDatabase::TitleFont | 2 | 系统用于标题的标准字体。 |
QFontDatabase::SmallestReadableFont | 3 | 系统中可读的最小字体。 |
enum QFontDatabase::WritingSystem
| 常数 | 值 | 描述 |
|---|---|---|
QFontDatabase::Any | 0 | |
QFontDatabase::Latin | 1 | |
QFontDatabase::Greek | 2 | |
QFontDatabase::Cyrillic | 3 | |
QFontDatabase::Armenian | 4 | |
QFontDatabase::Hebrew | 5 | |
QFontDatabase::Arabic | 6 | |
QFontDatabase::Syriac | 7 | |
QFontDatabase::Thaana | 8 | |
QFontDatabase::Devanagari | 9 | |
QFontDatabase::Bengali | 10 | |
QFontDatabase::Gurmukhi | 11 | |
QFontDatabase::Gujarati | 12 | |
QFontDatabase::Oriya | 13 | |
QFontDatabase::Tamil | 14 | |
QFontDatabase::Telugu | 15 | |
QFontDatabase::Kannada | 16 | |
QFontDatabase::Malayalam | 17 | |
QFontDatabase::Sinhala | 18 | |
QFontDatabase::Thai | 19 | |
QFontDatabase::Lao | 20 | |
QFontDatabase::Tibetan | 21 | |
QFontDatabase::Myanmar | 22 | |
QFontDatabase::Georgian | 23 | |
QFontDatabase::Khmer | 24 | |
QFontDatabase::SimplifiedChinese | 25 | |
QFontDatabase::TraditionalChinese | 26 | |
QFontDatabase::Japanese | 27 | |
QFontDatabase::Korean | 28 | |
QFontDatabase::Vietnamese | 29 | |
QFontDatabase::Symbol | 30 | |
QFontDatabase::Other | Symbol | (与“符号”相同) |
QFontDatabase::Ogham | 31 | |
QFontDatabase::Runic | 32 | |
QFontDatabase::Nko | 33 |
成员函数文档
[static, since 6.9] void QFontDatabase::addApplicationEmojiFontFamily(const QString &familyName)
将familyName 添加为应用程序定义的表情符号字体。
在显示多色表情符号或表情符号序列时,Qt 默认会优先使用系统默认的表情符号字体。有时应用程序可能需要覆盖默认设置,以实现特定的视觉风格,或显示系统不支持的表情符号。
该函数于 Qt 6.9 中引入。
另请参阅 removeApplicationEmojiFontFamily 、setApplicationEmojiFontFamilies()、applicationEmojiFontFamilies() 以及addApplicationFallbackFontFamily()。
[static, since 6.8] void QFontDatabase::addApplicationFallbackFontFamily(QChar::Script script, const QString &familyName)
将familyName 添加为script 的应用程序定义的备用字体。
当 Qt 遇到所选字体不支持的字符时,它会遍历备用字体列表以查找匹配项。这确保了即使主字体不支持,也能在单个字符串中混合使用多种脚本。
备用字体列表的选取基于字符串的脚本类型以及其他条件(例如系统语言)。
虽然系统备用列表通常已足够,但在某些情况下覆盖默认行为会很有用。其中一种情况是使用应用程序字体作为备用,以确保跨平台的一致性。
另一种情况是,应用程序可能使用具有区域差异的脚本编写,且希望在多个区域以未本地化的形式运行。此时,将本地区域的备用字体覆盖为与应用程序语言相匹配的备用字体可能会很有帮助。
通过将 `familyName ` 传递给 `addApplicationFallbackFontFamily()`,该字体家族将成为从 `script` 匹配缺失字符时的首选家族。`script ` 必须是有效的文字系统(QChar::Script_Latin 或更高版本)。当为同一文字系统添加多个字体时,它们将按逆序优先级排列,即最后添加的字体家族将首先被检查,依此类推。
注意:Qt 的 字体匹配算法将QChar::Script_Common (未确定脚本)和QChar::Script_Latin 视为相同。为其中任意一种添加备用字体时,该设置也将适用于另一种。
该函数于 Qt 6.8 中引入。
另请参阅 setApplicationFallbackFontFamilies()、removeApplicationFallbackFontFamily() 和applicationFallbackFontFamilies()。
[static] int QFontDatabase::addApplicationFont(const QString &fileName)
从fileName 指定的文件中加载字体,并使其可供应用程序使用。该函数返回一个ID,该ID可用于通过removeApplicationFont()再次移除该字体,或用于获取该字体所包含的字体家族名称列表。
如果无法加载字体,该函数将返回 -1。
目前仅支持 TrueType 字体、TrueType 字体集合和 OpenType 字体。
另请参阅 addApplicationFontFromData()、applicationFontFamilies() 和removeApplicationFont()。
[static] int QFontDatabase::addApplicationFontFromData(const QByteArray &fontData)
从fontData 指定的二进制数据中加载字体,并使其可供应用程序使用。该函数返回一个ID,该ID可用于通过removeApplicationFont()再次移除该字体,或用于获取该字体所包含的字体家族名称列表。
如果无法加载字体,该函数将返回 -1。
目前仅支持 TrueType 字体、TrueType 字体集合和 OpenType 字体。
另请参阅 addApplicationFont()、applicationFontFamilies() 和removeApplicationFont()。
[static, since 6.9] QStringList QFontDatabase::applicationEmojiFontFamilies()
返回应用程序定义的表情符号字体家族列表。
该函数在 Qt 6.9 中引入。
另请参阅 addApplicationEmojiFontFamily()、removeApplicationEmojiFontFamily()、setApplicationEmojiFontFamilies() 以及applicationFallbackFontFamilies()。
[static, since 6.8] QStringList QFontDatabase::applicationFallbackFontFamilies(QChar::Script script)
返回由addApplicationFallbackFontFamily()函数先前为script 添加的、由应用程序定义的备用字体家族列表。
该函数在 Qt 6.8 中引入。
另请参阅 setApplicationFallbackFontFamilies()、addApplicationFallbackFontFamily() 和removeApplicationFallbackFontFamily()。
[static] QStringList QFontDatabase::applicationFontFamilies(int id)
返回由id 标识的给定应用程序字体的字体家族列表。
另请参阅 addApplicationFont() 和addApplicationFontFromData()。
[static] bool QFontDatabase::bold(const QString &family, const QString &style)
如果字体家族为family 、样式为style 的字体是粗体,则返回true ;否则返回false 。
[static] QStringList QFontDatabase::families(QFontDatabase::WritingSystem writingSystem = Any)
返回一个已排序的列表,其中包含支持writingSystem 的可用字体家族。
如果一个字体家族存在于多个字体厂商中,则该字体的返回名称将采用“字体家族 [字体厂商]”的形式。示例:“Times [Adobe]”、“Times [Cronyx]”、“Palatino”。
另请参阅 writingSystems()。
[static] QFont QFontDatabase::font(const QString &family, const QString &style, int pointSize)
返回一个QFont 对象,其字体家族为family ,字体样式为style ,字号为pointSize 。如果无法创建匹配的字体,则返回一个使用应用程序默认字体的QFont 对象。
[static] bool QFontDatabase::isBitmapScalable(const QString &family, const QString &style = QString())
如果字体家族为family 、样式为style 的字体是可缩放位图字体,则返回true ;否则返回false 。缩放位图字体通常会产生不美观且难以辨认的效果,因为字体的像素会被缩放。如果需要缩放位图字体,最好将其缩放至smoothSizes() 返回的固定尺寸之一。
另请参阅 isScalable() 和isSmoothlyScalable()。
[static] bool QFontDatabase::isFixedPitch(const QString &family, const QString &style = QString())
如果字体家族为family 、样式为style 的字体是等宽字体,则返回true ;否则返回false 。
[static] bool QFontDatabase::isPrivateFamily(const QString &family)
仅当family 字体家族为私有字体时,才返回true 。
例如,在 macOS 和 iOS 上,由于系统 UI 字体对用户不可访问,因此会出现这种情况。为了完整起见,QFontDatabase::families() 会返回所有字体家族,包括私有字体。如果您正在开发字体选择控件,应使用此函数以隐藏私有字体。
另请参阅 families()。
[static] bool QFontDatabase::isScalable(const QString &family, const QString &style = QString())
如果字体家族为family 、样式为style 的字体是可缩放的,则返回true ;否则返回false 。
另请参阅 isBitmapScalable() 和isSmoothlyScalable()。
[static] bool QFontDatabase::isSmoothlyScalable(const QString &family, const QString &style = QString())
如果字体家族为family 、样式为style 的字体支持平滑缩放,则返回true ;否则返回false 。如果该函数返回true ,则可以将该字体安全地缩放至任意大小,且结果始终美观。
另请参阅 isScalable() 和isBitmapScalable()。
[static] bool QFontDatabase::italic(const QString &family, const QString &style)
如果字体家族为family 、样式为style 的字体是斜体,则返回true ;否则返回false 。
[static] QList<int> QFontDatabase::pointSizes(const QString &family, const QString &styleName = QString())
返回字体家族为family 、样式为styleName 的字体所支持的点大小列表。该列表可能为空。
另请参阅 smoothSizes() 和standardSizes()。
[static] bool QFontDatabase::removeAllApplicationFonts()
删除之前使用addApplicationFont()和addApplicationFontFromData()添加的所有应用程序本地字体。
如果字体卸载成功,则返回true ;否则返回false 。
另请参阅 removeApplicationFont()、addApplicationFont() 和addApplicationFontFromData()。
[static, since 6.9] bool QFontDatabase::removeApplicationEmojiFontFamily(const QString &familyName)
从应用程序定义的表情符号字体列表中移除familyName ,前提是该字体此前已通过addApplicationEmojiFontFamily()添加。
如果字体家族名称在列表中,则返回 true;否则返回 false。
该函数在 Qt 6.9 中引入。
另请参阅 addApplicationEmojiFontFamily()、setApplicationEmojiFontFamilies()、applicationEmojiFontFamilies() 和removeApplicationFallbackFontFamily()。
[static, since 6.8] bool QFontDatabase::removeApplicationFallbackFontFamily(QChar::Script script, const QString &familyName)
从script 的应用程序定义的备用字体列表中移除familyName ,前提是该字体此前已通过addApplicationFallbackFontFamily()添加到该列表中。
如果字体家族名称在列表中,则返回 true;否则返回 false。
该函数自 Qt 6.8 起引入。
另请参阅 addApplicationFallbackFontFamily()、setApplicationFallbackFontFamilies() 和applicationFallbackFontFamilies()。
[static] bool QFontDatabase::removeApplicationFont(int id)
移除由id 标识的先前加载的应用程序字体。如果字体卸载成功,则返回true ;否则返回false 。
另请参阅 removeAllApplicationFonts()、addApplicationFont() 和addApplicationFontFromData()。
[static, since 6.9] void QFontDatabase::setApplicationEmojiFontFamilies(const QStringList &familyNames)
将应用程序定义的表情符号字体列表设置为familyNames 。
该函数在 Qt 6.9 中引入。
另请参阅 addApplicationEmojiFontFamily()、removeApplicationEmojiFontFamily()、applicationEmojiFontFamilies() 以及setApplicationFallbackFontFamilies()。
[static, since 6.8] void QFontDatabase::setApplicationFallbackFontFamilies(QChar::Script script, const QStringList &familyNames)
将script 的应用程序定义的备用字体列表设置为familyNames 。
当 Qt 在 `script ` 中遇到当前字体不支持的字符时,它将按顺序从头到尾检查 `familyNames` 中的字体家族,直到找到匹配的字体。更多详细信息请参阅addApplicationFallbackFontFamily()。
此函数将覆盖script 的当前应用程序定义的备用字体列表。
该函数在 Qt 6.8 中引入。
另请参阅 addApplicationFallbackFontFamily()、removeApplicationFallbackFontFamily() 和applicationFallbackFontFamilies()。
[static] QList<int> QFontDatabase::smoothSizes(const QString &family, const QString &styleName)
返回字体家族为family 、样式为styleName 时,外观美观的点大小。该列表可以为空。对于不可缩放字体和位图可缩放字体,此函数等同于pointSizes()。
另请参阅 pointSizes() 和standardSizes()。
[static] QList<int> QFontDatabase::standardSizes()
返回一个标准字体大小的列表。
另请参阅 smoothSizes() 和pointSizes()。
[static] QString QFontDatabase::styleString(const QFont &font)
返回一个描述font 样式的字符串。例如,“粗体斜体”、“粗体”、“斜体”或“正常”。也可能返回空字符串。
[static] QString QFontDatabase::styleString(const QFontInfo &fontInfo)
返回一个描述fontInfo 样式的字符串。例如,“Bold Italic”、“Bold”、“Italic”或“Normal”。也可能返回空字符串。
[static] QStringList QFontDatabase::styles(const QString &family)
返回字体家族family 可用的样式列表。一些示例样式包括:“Light”、“Light Italic”、“Bold”、“Oblique”、“Demi”。该列表可能为空。
另请参阅 families()。
[static] QFont QFontDatabase::systemFont(QFontDatabase::SystemFont type)
返回适用于给定type 情况的最合适字体,以便与系统的视觉风格和操作体验实现良好融合。
另请参阅 QGuiApplication::font()。
[static] int QFontDatabase::weight(const QString &family, const QString &style)
返回字体家族为family 、样式为style 的字体的字重。如果不存在此字体家族和样式的组合,则返回 -1。
[static] QString QFontDatabase::writingSystemName(QFontDatabase::WritingSystem writingSystem)
返回writingSystem 的名称(例如,用于在对话框中显示给用户)。
[static] QString QFontDatabase::writingSystemSample(QFontDatabase::WritingSystem writingSystem)
返回一个包含来自writingSystem 的示例字符的字符串。
[static] QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems()
返回一个按顺序排列的可用书写系统列表。该列表是根据系统上所有已安装字体的信息生成的。
另请参阅 families()。
[static] QList<QFontDatabase::WritingSystem> QFontDatabase::writingSystems(const QString &family)
返回一个按给定字体family 所支持的书写系统排序的列表。
另请参阅 families()。
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.