我有一个使用Qt WebEngine的应用程序。但是我发现在关闭我的应用程序或将其崩溃之后,“ Qtwebengineprocess”仍然存在。我的应用太大了,无法在此处显示,但以下是一个可以说明问题的小例子:
#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错误?预先感谢。
UPD :Qt 5.11,Win10
答案 0 :(得分:2)
这似乎是PyQt 5.11及更高版本中的错误。重新安装操作系统并安装最新版本的PyQt(5.11.3)之后,我遇到了QWebEngineView的此问题以及其他问题,无法在布局中正确调整其大小。降级为PyQt 5.10.1,一切正常运行。如果使用Python,只需运行:
pip uninstall PyQt5
pip install PyQt5==5.10.1
答案 1 :(得分:1)
我找到了实际的问题和解决方案-here。这是Qt 5.11错误,准确描述了此问题。
其中一条评论提出了对我有用的解决方案:
preg_replace('/\[([^\]]+)\]+/', "I'm a $1!", $string);
只需在创建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.
之前添加该行,就不会崩溃。当然,这有在Qt more details here上使用ANGLE与动态GPU的优缺点。
答案 2 :(得分:0)
参考this post,当在exit()
中调用main()
时,将不会为本地范围内的对象调用析构函数! exit()
不返回。
放置在app.exec()
之后的任何代码(在您的情况下为delete viewer;
)仅在主事件循环退出/退出并返回给调用者之后才执行,您的计时器正在调用(stdlib){{1} }从主循环内进行,这意味着:如果您希望代码正确运行并执行exit()
,则您将退出执行而不返回调用者,并且,不会执行app.exec()
之后放置的所有代码。 ,则计时器应退出主事件循环,因此您需要调用delete viewer;
或app.quit()
。