应用程序关闭后Qtwebengine进程未关闭

问题描述 投票:0回答:3

我有一个使用 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 错误?预先感谢。

更新:Qt 5.11,Win10

c++ qt qtwebengine
3个回答
2
投票

我找到了实际问题和解决方案 - here。这是 Qt 5.11 bug,准确描述了这个问题。

其中一条评论有对我有用的解决方案:

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 上使用 ANGLE 与动态 GPU 的优点和缺点有关,更多详细信息请参见此处


2
投票

这似乎是 PyQt 5.11 及更高版本中的一个错误。重新安装操作系统并安装最新版本的 PyQt (5.11.3) 后,我遇到了 QWebEngineView 无法在布局中正确调整大小的问题和其他问题。降级到 PyQt 5.10.1,一切再次正常运行。如果使用 Python,只需运行:

pip uninstall PyQt5
pip install PyQt5==5.10.1

1
投票

参考这篇文章,当在

exit()
中调用
main()
时,不会为本地作用域的对象调用析构函数!
exit()
不回来。

放置在

app.exec()
之后的任何代码(在您的情况下为
delete viewer;
),仅在主事件循环退出/退出并返回到调用者之后才会执行,您的计时器正在从主循环内调用(stdlib)
exit()
,这意味着:您正在退出执行而不返回调用者,并且,放置在
app.exec()
之后的代码都不会被执行,如果您希望代码正确运行并执行
delete viewer;
,那么计时器应该退出主事件循环,因此您需要请致电
app.quit()
app.exit(-1)

© www.soinside.com 2019 - 2024. All rights reserved.