Qt:QFontDatabase类

1059 篇文章 285 订阅

QFontDatabase类提供有关基础窗口系统中可用字体的信息

头文件

#include <QFontDatabase>

cmake:

find_package(Qt6 COMPONENTS Gui REQUIRED)
target_link_libraries(mytarget PRIVATE Qt6::Gui)

qmake:

QT += gui

注意:此类中的所有函数都是线程安全的。

详细说明

此类的最常见用法是在数据库中查询字体系列(families)的列表以及每个系列可用的pointSizes()和样式()。以另一种pointSizes)(是smoothSizes()返回在一个给定的系列和风格将看起来有吸引力的大小。

如果字体族可以从两个或更多的铸造厂获得,则铸造厂名称包含在家族名称中;例如:“Helvetica [Adobe]”和“Helvetica [Cronyx]”。当您指定一个族时,您可以使用旧的连字符"foundry-family"格式或括号内的"family [foundry]"格式;例如:“Cronyx-Helvetica”或“Helvetica [Cronyx]”。如果family有一个foundry,它总是使用括起来的格式返回,就像families()返回的值一样。

font()函数的作用是:返回给定系列、样式和点大小的QFont。

可以检查family和style组合,看看它是斜体italic()还是粗体bold(),并检索它的weight()。类似地,我们可以调用isBitmapScalable()、isSmoothlyScalable()、isScalable()和isFixedPitch()

例子:

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());
    }
}

本示例获取字体系列列表,每个系列的样式列表以及每个系列和样式组合可用的磅值,并在树形视图中显示此信息。

另请参见QFontQFontInfoQFontMetrics字符映射示例

成员类型

SystemFont

[since 5.2]
enum QFontDatabase::SystemFont

在这里插入图片描述
这个枚举是在Qt 5.2中引入或修改的。

WritingSystem

enum QFontDatabase::WritingSystem

在这里插入图片描述

成员函数

addApplicationFont

从文件名指定的文件中加载字体,并使其对应用程序可用。返回一个ID,可以使用removeApplicationFont()再次删除字体,或者检索字体中包含的家族名称列表。

如果无法加载字体,函数将返回-1。

目前只支持TrueType字体、TrueType字体集合和OpenType字体。

注意:在Unix/X11平台上添加没有fontconfig的应用字体目前是不支持的。

另请参见:addApplicationFontFromData(), applicationFontFamilies(), removeApplicationFont().

例子:-

 if (QFontDatabase::addApplicationFont("://font/DejaVuSans.ttf") == -1) {
        qWarning() << "Couldn't load font";
    }
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
"QFontDatabase" has not been declared的错误是因为编译器无法找到QFontDatabase类的声明。这可能是由于以下几个原因引起的: 1. Qt版本不匹配:确保你使用的Qt版本与你的代码中使用的Qt版本一致。如果你的代码使用的是Qt 5.9.9,那么你需要确保你的Qt安装版本是5.9.9。 2. 缺少字体文件:Qt在5.9版本之后不再提供字体文件,因此如果你的代码中使用了自定义字体,你需要手动提供字体文件。你可以从其他Windows电脑的C:\Windows\Fonts目录下找到一些ttf文件,并将它们添加到你的项目中。 3. 编译器设置问题:如果你使用的是银河麒麟V10 SP1 2203操作系统和飞腾CPU D2000/8,可能存在编译器设置问题。你可以尝试更新你的编译器或重新设置编译环境。 综上所述,解决这个错误的方法是确保使用的Qt版本与代码一致,提供所需的字体文件,并检查编译器设置。这样应该能够解决"'QFontDatabase' has not been declared"错误。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *2* *3* [QFontDatabase: Cannot find font directory .../lib/fonts](https://blog.csdn.net/zhouyingge1104/article/details/127832658)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 100%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值