首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在Qt中获得系统默认字体设置?

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

Stack Overflow用户
提问于 2012-06-13 08:46:14
回答 2查看 30.9K关注 0票数 19

我正在用Qt构建一个桌面应用程序,我的开发机器是win 7 x64和日本地区,标准的系统字体是Meiryo。win 7的大多数UI都在这种字体中,尽管经典/较老的程序(如ui字体定制窗口)本身使用不同的字体,即MS哥特式字体。直到我发现QtCreator在一个地方用MS哥特式和在另一个地方使用Meiryo来构建我的应用程序,我才感到烦恼。例如,q标签、qlineedits、qcombobox都使用MS哥特式,但是我后来添加的带有qtableview的自定义完成器使用Meiryo。

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

更让我担心的是,QApplication::字体()返回MS哥特式,这在我的例子中是错误的。当然,我可以使用QApplication::setFont()来设置应用程序范围的字体,但这违背了在没有微管理字体的情况下具有本机外观-n-感觉的整个目的。

所以我的问题是,

  1. 如何确定系统默认字体,
  2. ,如果这是Qt Bug,我该如何绕过它?
  3. ,我应该如何使用.ui文件,并在运行时仍然让UI使用默认系统字体?

我发现的一些澄清和事实

  1. 我希望我的应用程序对每一个文本都使用系统默认字体。
  2. This discussion说,无论你是否愿意,设计师都会添加字体信息。因此Qt将遵守此信息,而不是系统默认字体。至少有人提到手动删除此信息会使Qt系统在运行时默认字体。
  3. 在我的开发机器QApplication::
  4. ()中返回错误的默认字体。但是我后来在代码中添加的QTableView为什么使用正确的字体呢?它从哪里得到这些信息的?

因此,如果我找到了QTableView找到这些信息的地方,我可以在main中获取它,并使用QApplication::setFont()将其设置为应用程序。然后,剩下的是手动删除所有字体信息,然后希望它将工作。但这就是为什么我们一开始就使用Qt,不是吗?

EN

回答 2

Stack Overflow用户

发布于 2012-08-29 13:51:58

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

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

的默认字体。

一个例子(主要方法):

代码语言:javascript
运行
复制
QApplication application(argc, argv);
QFont font;
font.setFamily(font.defaultFamily());
application.setFont(font);
...rest of your code...
票数 12
EN

Stack Overflow用户

发布于 2016-11-02 13:04:16

Qt将调用Windows SystemParametersInfo来获取QMenuQMessageBox等的字体,并使用GetStockObject获得默认的系统字体。有些小部件具有与系统默认字体不同的特殊字体。我认为Qt做的是对的,但是默认的日文/中文衬线字体在HiDPI显示器上看起来很糟糕。

只需使用QFont QApplication::font ( const char * className )获得正确的字体(在您的示例中为Meryo),例如qApp->setFont(QApplication::font("QMenu"))

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11011238

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档