关闭应用程序后Qtwebengineprocess没有关闭

时间:2018-07-27 13:27:37

标签: c++ qt qtwebengine

我有一个使用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

3 个答案:

答案 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()