从 QFontDatabase 设置 QFont 会将所有标签设置为等宽字体? Qt C++

Setting QFont from QFontDatabase sets all labels to monospaced font? Qt C++

我正在尝试将一个 QLabel 设置为等宽字体。默认情况下,我在设计器中将所有其他标签设置为 "Arame-Regular"。通常,尝试在设计器中将我的任何标签设置为 "Arame-Mono"(等宽字体)是行不通的。他们保持规律。

在我的 mainwindow.cpp 中的这段代码之后,应用程序中的每个标签都变成等宽的:

    QFontDatabase::addApplicationFont("/path/to/the/fonts/Arame-Mono.ttf");
    QFont monospace("Arame-Mono");
    ui->labelFontTest->setFont(monospace);

这解决了部分问题,我猜可以使用等宽字体,但我不希望应用程序中的每个标签都设置为等宽字体。我怎样才能只解决这个特定标签以对其应用等宽字体,并保持所有其他标签的原样?

这样做的另一个副作用是我在启动时收到此消息:

qt.qpa.fonts: Populating font family aliases took 159 ms. Replace uses of missing font family "Arame-Mono" with one that exists to avoid this cost.

我都在我的 Mac 上本地安装了字体并添加到我的 .pro 文件中。字体位于项目目录中的 fonts 文件夹中:

DISTFILES += \
    Fonts/Arame-Mono.ttf \
    Fonts/Arame-Regular.ttf \

感谢任何帮助!

我创建了一个简单的演示;它显示三个标签,其中只有最后一个手动设置为等宽:

int main(int argc, char* argv[])
{
    QApplication a(argc, argv);

    using QFD = QFontDatabase;
    if (QFD::addApplicationFont(QStringLiteral(":/Roboto/Roboto-Regular.ttf")) == -1) {
        qWarning() << "Failed to load Roboto-Regular.ttf";
    }
    if (QFD::addApplicationFont(QStringLiteral(":/Roboto_Mono/RobotoMono-Regular.ttf")) == -1) {
        qWarning() << "Failed to load RobotoMono-Regular.ttf";
    }

    QFont regular("Roboto");
    QApplication::setFont(regular);

    MainWindow w;
    w.show();

    return a.exec();
}
    QFont mono("RobotoMono");
    ui->label_3->setFont(mono);

这完美无缺。对于您的情况,我建议在 main 中为应用程序设置常规字体。然后只有在需要时才使用等宽的。另外,请记住,如果您计划发布应用程序,您应该使用 QtResources (.qrc) 文件将字体嵌入到可执行文件中。