来自 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 的令人费解的行为的主要内容,如果未能解决你的问题,请参考以下文章
iPhone:iOS 6 和 5.1 之间 cellForRowAtIndexPath 行为的令人费解的差异
Flutter 令人费解的流行为:setState 调用但不重建 widget 树