微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在Qt中获取系统默认字体设置?

我正在使用Qt构建一个桌面应用程序,我的开发机器是日本语言环境的7 x64,标准系统字体是 Meiryo.大多数win 7 UI是这种字体,虽然经典/较旧的程序,如ui字体定制窗口本身使用不同字体是MS UI哥特式.
直到我发现QtCreator在一个地方用MS UI哥特式构建我的应用程序,而Meiryo在另一个地方,这并不打扰我.例如,qlabel,qlineedits,qcomboBox都使用MS UI哥特式,但是使用qtableview的自定义完成我稍后添加使用Meiryo.

我在QtCreator的设计器中制作了大部分的UI,而在代码添加了完整的UI.如果我在设计器中将所有小部件的字体更改为Meiryo,那么应用程序当然会使用Meiryo看起来正确,但在这种情况下,我宁愿Qt为我自动选择任何系统的认字体,因为win 7不会是唯一的平台我将使用这个程序.

更重要的是QApplication :: font()返回MS UI哥特式,这在我的情况下是错误的.当然,我可以使用QApplication :: setFont()设置应用程序的字体,但是它的整体目的就是让原始的外观看起来没有显示字体.

所以我的问题是

> Qt如何确定系统认字体,
>如果这是一个Qt Bug我该怎么办?
>我应该如何使用.ui文件,仍然有我的UI在运行时使用认系统字体?

我发现的一些澄清和事实

>我希望我的应用程序为每个文本使用系统认字体.
> This discussion说,设计师会添加字体信息,无论你是否想要它.所以Qt会尊重这个信息,而不是系统认的字体.至少有人提到手动删除此信息应该使Qt在运行时选择系统认字体.
>在我的开发机器QApplication :: font()中返回WRONG认字体.但是如何来一个QTableView我稍后在代码添加使用RIGHT字体?它在哪里得到这个信息?

所以,如果我发现QTableView找到这个信息的地方,我可以在main中找到它,并用QApplication :: setFont()将其设置为应用程序.那么剩下的是手动删除所有的字体信息,然后HOPEFULLY它将工作.但是这就是为什么我们使用Qt在第一位不是吗?

我可以想到两个可能的解决方案:

>您可以使用应用程序将字体打包为资源文件,这样所有平台都将使用该字体,而不管当前系统的认字体.
> QFont类有一个名为defaultFamily()方法.使用它可以手动设置整个QApplication认字体.

一个例子(主要方法):

QApplication application(argc,argv);
QFont font;
font.setFamily(font.defaultFamily());
application.setFont(font);
...rest of your code...

原文地址:https://www.jb51.cc/windows/371203.html

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐