QWebEngineView::renderProcessTerminated 信号在 QT C++ 中不起作用

QWebEngineView::renderProcessTerminated signal not working in QT C++

我正在尝试在 qt c++ 中连接信号和槽。我想要实现的是,当浏览器完成呈现页面时,我希望它发出信号并在我的插槽中接收它。我最初为 urlChanged() 信号编写它并且它工作正常但是当我将它更改为 renderProcessTerminated 时,它不会输出槽函数中的语句。

以下是声明插槽的 MyClass.h 文件的片段:

private slots:
        void onRenderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode);

以下是 MyClass.cpp 文件的构造函数片段,其中连接了信号和插槽:

connect(ui->webEngineView, &QWebEngineView::renderProcessTerminated, this, &MyClass::onRenderProcessTerminated);

下面是槽函数onRenderProcessTerminated来自MyClass.cpp(cout是我创建的函数,用于在web引擎视图中输出消息并且工作正常):

void MyClass::onRenderProcessTerminated(QWebEnginePage::RenderProcessTerminationStatus terminationStatus, int exitCode) {
    cout("INSIDE RENDER PROCESS TERMINATED");
}

What I want to achieve is that when the browser finishes rendering the page I want it to emit the signal

RenderProcessTerminated 并不意味着“完成页面渲染”。这意味着用于渲染的操作系统进程已异常终止。它发生在例如当渲染器崩溃时。 Qt文档明确指出:

This signal is emitted when the render process is terminated with a non-zero exit status. terminationStatus is the termination status of the process and exitCode is the status code with which the process terminated.

在英语中,您要查找的动词是 finished 而不是 terminated。前者暗示后者:当一个进程完成时,它就终止了。但反过来是不必要的:一个进程很可能在完成任务之前终止,例如如果它崩溃,或者在父进程退出时终止,等等。而且: RenderProcess 并不意味着“渲染某物的任务”。它的字面意思是“执行渲染的操作系统进程”。只要您有任何网络视图处于活动状态,该进程通常必须保持活动状态。

我能看到的唯一接近您想要的信号是 QWebEngineView::loadFinished(bool ok)。试试吧。

否则,为了获得更好的通知,您需要向视图中注入一些 javascript 并与之交互。付出的努力可能不值得。