c++ - 从 QFontDatabase 设置 QFont 将所有标签设置为等宽字体?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 文件中。字体位于项目目录内的字体文件夹中:
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
) 文件将字体嵌入到可执行文件中。
推荐阅读
- reactjs - React JS 中的 API 调用
- scala - Sbt 插件在其他任务之前/之后运行任务
- angular - 如何在引导模式中将焦点设置为材料日期选择器?
- vue.js - 如何在整个电子应用程序中访问“进程”?
- spring - Spring MVC Rest API - 没有“com.app.dao.AdminsRepository”类型的合格bean
- java - 登录注册 android 应用程序无法连接到本地服务器(连接被拒绝)
- amazon-s3 - 使用 informatica BDM 在 Amazon s3 中创建文件夹模式
- python - Xcode 更新后,“python3 setup.py build_ext --inplace”中断,因为它使用 libstdc++ 而不是 libc++
- javascript - AngularJS 组件 $onChanges 仅在分配新 val 时才被触发,而不是进行更改
- python - 在python中获取一个加密安全的随机数作为整数