【发布时间】:2012-06-16 04:42:02
【问题描述】:
我正在使用 Qt 构建一个桌面应用程序,我的开发机器是 win 7 x64 with Japanese locale,标准系统字体是 Meiryo。大多数win 7 UI都是这种字体,虽然经典/旧程序,如ui字体自定义窗口本身使用不同的字体,即MS UI Gothic。 直到我发现 QtCreator 在一个地方用 MS UI Gothic 构建我的应用程序,而在另一个地方用 Meiryo 构建我的应用程序时,这才困扰我。例如,qlabels、qlineedits、qcombobox 都使用 MS UI Gothic,但我稍后添加的带有 qtableview 的自定义完成器使用 Meiryo。
我在 QtCreator 的设计器中制作了大部分 UI,并在代码中添加了完成器。如果我在设计器中将所有小部件的字体更改为 Meiryo,那么应用程序当然会使用 Meiryo,因此看起来不错,但在这种情况下,我宁愿 Qt 自动为我选择任何系统的默认字体,因为 win 7 不是唯一的平台我将使用这个程序。
更让我担心的是 QApplication::font() 返回 MS UI Gothic,在我的情况下这是错误的。当然,我可以使用 QApplication::setFont() 设置应用程序范围的字体,但这违背了在没有微管理字体的情况下拥有原生外观的整个目的。
所以我的问题是,
- Qt 如何确定系统默认字体以及,
- 如果这是一个 Qt 错误,我该如何解决?
- 我应该如何在使用 .ui 文件的同时让我的 UI 在运行时使用默认系统字体?
我发现的一些澄清和事实
我希望我的应用程序对每个文本都使用系统默认字体。
This discussion说Designer会添加字体信息,不管你想不想。所以 Qt 会尊重这个信息而不是系统默认字体。至少有人提到手动删除此信息应该使 Qt 在运行时选择系统默认字体。
在我的开发机器中,QApplication::font() 返回错误的默认字体。但是我稍后在代码中添加的 QTableView 怎么会使用 RIGHT 字体?它是从哪里得到这些信息的?
因此,如果我找到 QTableView 找到此信息的位置,我可以在 main 中获取它,并使用 QApplication::setFont() 将其设置为应用程序范围。然后剩下的就是手动删除所有字体信息,然后希望它会起作用。但这就像我们首先使用 Qt 的原因,不是吗?
【问题讨论】:
-
p.s Qt Demo 程序也显示了这些症状,而且我不使用二进制 QtSDK,我自己为每个 x86 和 x64 编译 Qt,并使用 QtCreator(二进制分发的)。我的工具链是 msvc2010 express。
-
不,这个假设似乎是错误的。见this。 Designer 将为 .ui 文件添加字体信息,并且没有关闭它的选项。我想要的是默认字体,不管我使用 .ui 文件的事实。我的问题是双重的,因为 Qt 还在 QApplication::font() 中返回了错误的默认字体。
-
发现 this answer 在完全不同的环境中,但仍然适用。我非常喜欢 Qt,但如果他们想保持“跨平台”声明,这些事情应该尽快解决
-
根据您链接的上一个堆栈溢出帖子,您似乎只能执行以下操作:“...我们必须搜索所有 .ui 文件,以确保没有平台- 自上一版本以来,特定字体信息已潜入任何 .ui 文件。”换句话说,在发布时,您似乎必须仔细阅读并删除任何提及字体的内容,这非常令人沮丧(如果可能的话。我不使用设计器,因此无法直接评论它)。很抱歉,我一开始对此并不了解,我倾向于回避设计师并从头开始编写我的 Qt 代码。
标签: qt windows-7 fonts locale qt4.7