Qtwebengineprocess is not closed after application closing
我有一个使用QtWebEngine的应用程序。但我发现,在关闭应用程序或崩溃后,"qtwebengineprocess"仍处于启用状态。我的应用程序太大,无法在这里显示,但这里有一个小例子,它也说明了问题:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| #include <QApplication>
#include <QWebEngineView>
#include <QProcess>
#include <QTimer>
int main(int argc, char **argv)
{
QApplication app(argc, argv);
QWebEngineView* viewer = new QWebEngineView(NULL);
viewer->show();
viewer->load(QUrl("https://www.telegraph.co.uk/content/dam/Pets/spark/royal-canin/tabby-kitten-small.jpg?imwidth=1400"));
QTimer::singleShot(2000, []() {
exit(-1);
});
app.exec();
delete viewer;
return 0;
} |
我忘了做点什么了吗?或者这是qt错误?事先谢谢。
更新:qt 5.11,win10
- 为什么你说"qtwebengineeprocess"仍然存在?
- @因为它仍然存在。我可以在任务管理器中找到它
- 我刚在Linux中尝试过,当窗口关闭时,进程就消失了。这个过程是永久的还是一段时间后就消失了?
- @Eyllanesc,进程始终消耗CPU。我忘了说,我在窗户上做这个
- 我建议你指出qt的版本,你的操作系统的版本,等等,但是它闻起来像个bug,报告一下。
这似乎是Pyqt 5.11及更高版本中的错误。在重新安装操作系统和安装最新版本的Pyqt(5.11.3)之后,我遇到了QWebEngineView在布局中未正确调整大小的问题。降级到Pyqt 5.10.1,一切又正常运行。如果使用python,只需运行:
1 2
| pip uninstall PyQt5
pip install PyQt5==5.10.1 |
- 谢谢,但是我使用C++,而不是Python。但我会在其他版本的qt上测试这个bug
- 是的,我的错,没看标签。但同样的概念也适用,降级到5.10.1,让我们知道它是如何发展的。
- 这适用于Pyqt5和Windows10!谢谢
我在这里找到了实际的问题和解决方案。这就是Qt5.11错误,它准确地描述了这个问题。
其中一条评论的解决方案对我很有用:
1 2 3
| When running with QCoreApplication::setAttribute(Qt::AA_UseOpenGLES);
at the top of the main() function, I'm observing that the qtwebengine process closes correctly,
both when stopping the debugger and when the release exe crashes. |
只是在创建我的qApp之前添加了这一行,没有看到任何崩溃。当然,这也带来了在qt上使用角度和动态gpu的优点和缺点,这里更详细。
- 这很奇怪,但是我第二次尝试了这个解决方案,现在它开始工作了。/实际上,已经没有剩下的WebEngine进程了。这个解决方案对我来说很好,谢谢!
- 注意,它应该在qt 5.12中修复,正如我在答案中链接的bug url中所指出的那样。
参考本文,当main()中调用exit()时,本地作用域对象将不调用析构函数!exit()不返回。
任何放在app.exec()之后的代码(在您的情况下是delete viewer;之后的代码),只有在主eventlop退出/退出并返回给调用者之后才会执行,您的计时器从主循环内调用(stdlib)exit(),这意味着:您退出执行而不返回调用者,并且在app.exec()之后放置的任何代码都不会执行,i如果希望代码正确运行并执行delete viewer;,那么计时器应该退出主事件循环,因此需要调用app.quit()或app.exit(-1)。
- 是的,我知道。但问题是,即使没有出口(-1),它有时也有与问题相同的行为。而且在Linux中,这个过程是以任何方式关闭的。
- @用户2123079,这几乎是浪费时间。我在(win10/64和qt5.11/msvc2017 kit)上运行更正后的代码片段,没有发现任何错误。
- 奇怪…拥有相同的环境。我会做更多的实验
- @用户2123079,在任务管理器中到底能找到什么?
- 名为"qtwebengineeprocess"的进程,它消耗CPU
- @用户2123079如何运行应用程序?
- 双击它或从Visual Studio-没有区别
- @用户2123079,您知道QWebEngine应该只在release模式下运行吗?
- 调试和发布版本的问题仍然存在
- 我在Qt5.11/Vs17中观察到同样的问题,只有当您提前终止应用程序,然后页面正确加载。尝试加载一些需要时间加载和退出应用程序的重页面,而不是JPG。不会终止WebEngine进程。如果在应用程序和用户提前终止应用程序中同时运行多个QWQebengineView,情况会更糟。
- 在Qt 5.7中,此类问题不存在。
- @shf,我将用qt版本和这个bug进行实验。一旦完成,我会在这里回复结果。