我使用 webkit2png 项目(稍微附加)在 Linux 中截取屏幕截图。在运行最新版本 QtWebkit 和 Python 2.6 的服务器上
在某些网站(例如118114.cn)上出现问题并且应用程序永远挂起。调试显示该代码片段存在问题:
while self.__loading:<br/>
if timeout > 0 and time.time() >= cancelAt: <br/>
raise RuntimeError("Request timed out on %s" % url) <br/>
while QApplication.hasPendingEvents(): <br/>
QCoreApplication.processEvents()
完整版源代码已发布 here (第 270-275 行)
不知何故,Loading-event 挂起,并且 hasPendingEvents 不能为 False。
大多数屏幕截图都是正常创建的,但有时由于某些 URL 导致我的应用程序丢失:(
有人知道如何解决这个问题以及事件挂起的原因吗?
最佳答案
我也在使用 webkit2png + Linux,并且在我的 MacBook Pro 上进行本地测试时遇到了您所描述的问题。问题似乎是 QApplication.hasPendingEvents() 错误地返回 True,并且 while 循环挂起。我通过删除 while 循环解决了这个问题:
while self.__loading:
if timeout > 0 and time.time() >= cancelAt:
raise RuntimeError("Request timed out on %s" % url)
QCoreApplication.processEvents()
请注意,您还需要在 __WebkitRendererHelper.render 中的几个位置进行此更改。进行这些更改后,一切都对我有用 - 祝你好运。
编辑:我相信我最初通过升级底层 QT 库在 Linux 方面解决了这个问题。 Ubuntu 10.04 LTS (4.6.2) 的默认版本有一个错误,该错误已在后续版本中修复。这是我的安装信息:
Package: libqtcore4
State: installed
Automatically installed: yes
Version: 4:4.7.0-0ubuntu2~lucid1~ppa1
Priority: optional
Section: libs
Maintainer: Kubuntu Developers <kubuntu-devel@lists.ubuntu.com>
Uncompressed Size: 7,471k
Depends: libc6 (>= 2.9), libgcc1 (>= 1:4.1.1), libglib2.0-0 (>= 2.12.0), libstdc++6 (>= 4.1.1), zlib1g (>= 1:1.1.4)
Breaks: libqt4-core (< 4.4.0~beta1-1), libqt4-gui (< 4.4.0~beta1-1)
Replaces: libqt4-core (< 4.4.0~beta1-1), libqt4-gui (< 4.4.0~beta1-1)
Description: Qt 4 core module
Qt is a cross-platform C++ application framework. Qt's primary feature is its rich set of widgets that provide standard GUI
functionality.
The QtCore module contains core non-GUI functionality.
关于python - QtWebkit 和 hasPendingEvents() 始终为 True,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4350016/