我正在用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-感觉的整个目的。
所以我的问题是,
我发现的一些澄清和事实
因此,如果我找到了QTableView找到这些信息的地方,我可以在main中获取它,并使用QApplication::setFont()将其设置为应用程序。然后,剩下的是手动删除所有字体信息,然后希望它将工作。但这就是为什么我们一开始就使用Qt,不是吗?
发布于 2012-08-29 13:51:58
我可以想到两种可能的解决方案:
defaultFamily()
的方法。使用它,您可以手动设置整个QApplication
.的默认字体。
一个例子(主要方法):
QApplication application(argc, argv);
QFont font;
font.setFamily(font.defaultFamily());
application.setFont(font);
...rest of your code...
发布于 2016-11-02 13:04:16
Qt将调用Windows SystemParametersInfo
来获取QMenu
、QMessageBox
等的字体,并使用GetStockObject
获得默认的系统字体。有些小部件具有与系统默认字体不同的特殊字体。我认为Qt做的是对的,但是默认的日文/中文衬线字体在HiDPI显示器上看起来很糟糕。
只需使用QFont QApplication::font ( const char * className )
获得正确的字体(在您的示例中为Meryo),例如qApp->setFont(QApplication::font("QMenu"))
https://stackoverflow.com/questions/11011238
复制相似问题