PySide-QtWebKit: CSS字体族无效

5
在QWebView中,我正在动态创建和加载HTML,使用QWebView.setHtml()方法。在我传递给该方法的HTML字符串中,我有一个<style>部分,其中我从外部文件注入CSS字符串。CSS工作得非常好,除了字体系列。字体总是回退到QWebView默认的无衬线字体。我可以使用QWebView.settings().setFontFamily(QtWebKit.QWebSettings.StandardFont, "serif")更改该默认字体,但这只是使页面上的所有内容成为衬线字体,而不是遵守CSS font-family值。
CSS文件中的相关部分:
.page-title {
    color:#BBBBBB;
    font-family:"Times New Roman",Garamond,serif;
}

这个问题出在字体上,预期中应该是一种有衬线字体,但实际呈现的是一种通用无衬线字体。然而,颜色显示没有问题。
为了调试,我曾经在调用QWebView.setHtml()之前,将整个HTML字符串打印出来,并将输出重定向到一个文件。当我在Chromium中打开这个文件时,它按照预期的方式呈现,这让我相信这个问题不是HTML/CSS问题。如果你有兴趣,可以从这里查看输出文件。
编辑:由于我在这里设置了赏金,请看这个快速tl;dr,它应该总结了所有重要内容: 使用PySide,我如何使一个由QWebView.setHtml()加载的HTML页面遵循CSS字体系列设置?具体来说,是否有某些秘密的隐藏设置可以切换这种行为?还是我应该在框架中报告这个问题?
如果你想自己测试一下,这里是我正在开发的项目的GitHub存储库链接。依赖关系在README中列出。

2
读取计算出的 CSS 属性(在开发者工具中),并查看是否有规则覆盖您的动态 CSS。 - Mathieu Marques
1
除了我已经使用的方法调用之外,我似乎在API中找不到任何相关内容。然而,在页面内使用JavaScript,我发现该部分的计算样式实际上是Times!因此它被正确地计算,但Qt中的某些内容正在覆盖它。 - Mortimer McMire
我对你正在使用的技术了解不多。然而,目前我能想到的最后一件事是在你的CSS规则中使用!important。像这样:font-family: "Times New Roman", "Garamond", "serif" !important;。祝你好运! - Mathieu Marques
是的,抱歉让您感到困惑。在我制作示例输出页面之后并在提问之前,以及在提问之后,我更改了CSS样式。但问题仍然存在:页面的一部分应该使用Times New Roman字体呈现,但实际上却使用了无衬线字体。请参见我对Moncho Chavez的回答。 - Mortimer McMire
1
作为测试,我建议在元素的样式属性中包含font-family声明,并查看是否有效。 - Kurt Pattyn
显示剩余2条评论
1个回答

4
在您提供的链接页面Page.html的头部 https://raw.github.com/crayZsaaron/df-legends-reader/master/page.html 中,我找到了这个。
.page-title {
    color:#BBBBBB;
    font-family:Helvetica, sans-serif;
}

也许尝试删除此内容,或将其替换为此内容。
.page-title {
    color:#BBBBBB;
    font-family:"Times New Roman",Garamond,serif;
}

谢谢,是的,我在提问之前和之后已经多次更改了CSS。我在问题中给出的样式可能不一定与当前项目中的样式匹配。现在,我认为标题应该是Helvetica字体,但页面内容应该是Times New Roman字体,并且HTML在页面加载时计算出来,但然后被Qt以某种方式覆盖。对此造成的困惑很抱歉。 - Mortimer McMire
我需要在运行时查看错误,以检查元素并查看哪个CSS受到影响,你可以这样做。在Chrome上右键单击,“检查元素”。 - Moncho Chavez
1
在Chrome中,该HTML文件正常显示,因此没有要检查的“问题元素”。问题不在于HTML/CSS,而是在于Qt。 - Mortimer McMire

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接