【问题标题】:QWebView not rendering fontsQWebView 不呈现字体
【发布时间】:2012-08-05 00:31:44
【问题描述】:

我正在编写一个显示文件夹中静态 HTML 文件的应用程序。出于某种原因,PyQt4 的 QWebView 类不允许渲染任何字体,即使对于远程网站也是如此:

QWebView

Chrome

我正在像这样加载文件:

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/'))

是否需要更改其他安全设置才能使其正常工作?

【问题讨论】:

  • 我看到用工件渲染的字体..“不允许任何字体渲染”到底是什么意思?
  • 只有一种字体,并且是唯一被渲染的字体(例如,看看Google Web Fonts)。我尝试将我的字体转换为不同的格式(TTF、WOFF、OTF 等),但 QWebView 会忽略它们。我用 PyGTK 重新编写了我的脚本,字体渲染就像 Chrome,但 Qt 允许更大的 Python/JavaScript 交互。

标签: qt4 pyqt4 qwebview


【解决方案1】:

在折磨了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)。

【讨论】:

  • 解决此问题的另一种解决方法:在您的系统中安装字体系列(将其打包在您的程序安装中)。或者获取最新的QWebViewqtwebkit 5.1 或更高版本(似乎支持.woff 字体。
【解决方案2】:

示例 url 的 stylesheet 使用 css @font-face 规则来指定在线字体。

不幸的是,目前在 QWebKit 中似乎已损坏:Bug 36351

【讨论】:

    【解决方案3】:

    【讨论】:

      猜你喜欢
      • 2015-09-22
      • 2012-09-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-22
      • 1970-01-01
      • 2014-05-08
      • 2012-09-23
      • 2015-04-19
      相关资源
      最近更新 更多