来自 QFontDatabase 的令人费解的行为

Posted

技术标签:

【中文标题】来自 QFontDatabase 的令人费解的行为【英文标题】:Baffling behavior from QFontDatabase 【发布时间】:2014-01-02 23:54:19 【问题描述】:

我正在尝试将字体加载到我的应用程序中。从逻辑上讲,我想加载多个字体粗细,但这就是问题所在。

我有两个字体文件,“PFD-Black.ttf”和“PFD-Regular.ttf”。我想同时使用它们,所以我使用以下代码加载它们:

fontid_regular = QFontDatabase.addApplicationFont("PFD-Regular.ttf")
fontid_black = QFontDatabase.addApplicationFont("PFD-Black.ttf")

然后我得到姓氏,如下所示:

familyname = fontdb.applicationFontFamilies(fontid_black)[0]

请注意,我也尝试过使用fontid_regular,但无济于事。然后我尝试将字体用于 QLabel:

lab = QLabel("My Font Window")
font = QFont(familyname)
lab.setFont(font)
lab.show()

这是我的代码的范围,除了样板导入和 QApplication.exec_() 调用。

这不起作用(这可能很明显,因为我正在询问关于它的问题),标签以默认字体显示。

关于我的问题令人困惑的部分是,当我注释掉 fontid_regular = QFontDatabase.addApplicationFont("PFD-Regular.ttf") 行时,粗体显示。

这是某种程度的工作(因为没有更好的词),但我无法使用常规的粗细字体。还应注意,注释掉我加载“PFD-Black.ttf”的行并不能解决问题。

请注意,我已经看到了 this question,但无论我对我的代码执行什么突变,我都无法让该解决方案为我工作,所以请不要将此问题标记为重复那个。

【问题讨论】:

两种字体的applicationFontFamilies 的值是多少?我怀疑它们是相同的,所以当你加载两种字体时,第一个是通过姓氏找到的,当你没有加载第一个字体时,第二个会出现。它可以解释为什么评论 fontid_regular 会改变行为。在加载两种字体时尝试使用font.setBold(true) 使用第二种字体。 这是个好主意,但是虽然我都加载了,但默认的 Helvetica 或其他任何字体都用作 QLabel 的字体,而不是重量较轻的自定义字体。 我已经尝试了setBold 的各种组合和注释行,但没有一个有效。 它发生在 Mac 上吗?哪个版本的? @KFox。您是否尝试过使用相同的“Avenir”字体链接到的另一个问题的解决方案?如果这样可行,那么问题似乎在于为您的“Playfair Display”字体找到等效的名称。 【参考方案1】:

问题已经在上面的cmets中解决了:原来是我使用的字体有问题。

【讨论】:

以上是关于来自 QFontDatabase 的令人费解的行为的主要内容,如果未能解决你的问题,请参考以下文章

令人费解的作用域行为

令人费解的 javascript 数组行为

iPhone:iOS 6 和 5.1 之间 cellForRowAtIndexPath 行为的令人费解的差异

Flutter 令人费解的流行为:setState 调用但不重建 widget 树

Winsock - 10038 错误 - Win2K3 服务器 - 令人费解的行为

使用Tensorflow后端的Keras LSTM RNN中令人费解的训练损失与纪元...行为的任何原因