2012-08-05 89 views
4

我正在编写一个应用程序,显示来自文件夹的静态HTML文件。出于某种原因,PyQt4中的QWebView类是不允许任何字体渲染,甚至远程网站:QWebView不呈现字体

QWebView

Bad fonts, bad

Good fonts

我正在加载文件,如下所示:

self.web_view = QWebView() 
self.settings = self.web_view.settings() 
self.settings.setAttribute(QWebSettings.LocalContentCanAccessRemoteUrls, True) 

self.web_view.load(QUrl('http://blender3d.github.com/Bevel/demo/')) 

是否还有更多的安全设置需要更改才能使其工作?

+0

我看到字体与工件呈现..你是什么意思的“不允许任何字体呈现”? – Luke 2012-08-07 23:37:27

+0

只有一种字体,它是唯一呈现的字体(例如,查看[Google Web Fonts](http://i.imgur.com/XISOW.png))。我试图将字体转换为不同的格式(TTF,WOFF,OTF等),但QWebView忽略它们。我用PyGTK重写了我的脚本,字体呈现就像Chrome一样,但Qt允许更大的Python/JavaScript交互。 – Blender 2012-08-08 00:03:33

回答

6

折磨QWebView几个小时后,我终于发现,令人惊讶的Font Squirrel呈现的外部字体。我多次突出显示这些字母,微笑地坐在那里敬畏。

不管怎么说,这似乎是为了使与QWebView这项工作:

@font-face { 
    font-family: 'Terminal Dosis'; 
    font-style: normal; 
    font-weight: 400; 
    src: local('Dosis Regular'), local('Dosis-Regular'), url('../fonts/terminal-dosis-regular.woff') format('woff'); 
} 

我不得不使它看起来像这样:

@font-face { 
    font-family: 'Terminal Dosis Regular'; 
    src: url('../fonts/terminal-dosis-regular.ttf') format('truetype'); 
} 

注意QWebView不喜欢WOFF字体。我必须通过Font Squirrel将我的转换为TrueType。

简而言之:

  • 确保您的字体是TrueType字体。
  • local()东西。
  • 看起来好像font-stylefont-weight被忽略。您必须为每种字体的每种样式制作不同的字体系列(例如,Terminal Dosis Bold)。
+0

解决此问题的另一个解决方法:将font-family安装到系统中(将其打包到程序安装中)。或者用'qtwebkit'' 5.1'或更高版本(它似乎支持'.woff'字体)获取最新的'QWebView'。 – 2015-02-28 00:42:50

0

示例url的stylesheet利用css @font-face规则来指定联机字体。

不幸的是,它看起来像是目前在QWebKit中打破:Bug 36351