你如何在Qt中获取系统默认字体设置?(How do you get System default f

2019-06-25 11:02发布

我建立使用Qt一个桌面应用程序,我开发的机器是赢得7 64位系统具有日语语言环境,标准的系统字体是明了体 。 大多数Win 7的用户界面是在这种字体,但经典的/旧的程序,例如UI字体自定义窗口本身使用不同的字体是MS UI哥特式。 这不打扰我,直到我发现QtCreator建立我的MS UI哥特式在同一个地方,且明了体中的其他应用程序。 例如,qlabels,qlineedits,qcombobox都采用MS UI哥特式,但有一个QTableView中的自定义完成者我添加之后的版本中明了体。

我做了最QtCreator的设计的UI,并完成者我在代码中添加。 如果我更改所有部件字型明了体中的设计,那当然应用程序将使用因此明了体看起来正确,但在这种情况下,我宁愿Qt的选择任何系统的默认自动字体适合我,因为赢得7将不会是唯一平台,我会使用该程序。

什么提出了我的关注更是QApplication的字体::()返回MS UI哥特式,这是在我的情况虚假。 当然,我可以使用的QApplication :: setfont程序(设置应用范围的字体),但违背了具有本机的外观正感觉没有微观字体的全部目的。

所以我的问题是,

  1. 如何确定的Qt系统默认字体和,
  2. 如果这是一个Qt的Bug我怎么去围绕它的故事吗?
  3. 我应该如何使用的.ui文件,并仍然在运行时我的UI使用默认的系统字体?

一些澄清和事实,我发现

  1. 我想我的应用程序使用系统默认字体为每个文本。

  2. 这个讨论说,设计师将增加你不管愿意不愿意字体信息。 因此,Qt的将履行这一信息,而不是系统默认字体。 至少有人提到手动删除这些信息应该让Qt的选秀系统默认字体在运行。

  3. 在我的开发机器的QApplication ::字体()返回错误的默认字体。 但如何来一个QTableView中我在后面的代码添加使用正确的字体? 它是从哪里得到这个消息?

所以,如果我找到在哪里QTableView中发现这个信息,我可以得到它的主,并与QApplication的设置应用广泛:: setfont程序()。 那么剩下的就是手动删除所有字体信息,然后希望它会工作。 但是,这就像为什么我们首先使用Qt是不是?

Answer 1:

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

  1. 你可以使用你的应用程序包的字体作为一个资源文件,这样一来所有的平台都使用该字体无论当前的系统默认字体。

  2. 该QFont类有一个叫做方法defaultFamily() 使用这个,你可以手动设置你的整个的默认字体QApplication

一个例子(主要方法):

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


Answer 2:

Qt的调用Windows的API SystemParametersInfo得到字体为QMenuQMessageBox等,并使用GetStockObject获得默认的系统字体。 某些部件有特殊字体这是系统默认的一个不同。 我认为Qt是做正确的事,但默认日本/中国serif字体很糟糕的HiDPI显示器。

只需使用QFont QApplication::font ( const char * className ) ,以获得正确的字体(Meryo你的情况),如qApp->setFont(QApplication::font("QMenu"))



文章来源: How do you get System default font settings in Qt?