QWebEngine:同步执行 运行Javascript - QEventLoop 块 Javascript 调用
QWebEngine: Execute runJavascript synchronously - QEventLoop blocks Javascript calls
使用 Qt 5.15.2 - 同步执行 运行Javascript。
问题:
我试过了
作为一个单独的应用程序,它运行良好,一切都按预期工作。但是在我的项目中eventLoop->exec(),JS函数没有被执行(调用了运行Javascript)。
QSharedPointer<QEventLoop> loop = QSharedPointer<QEventLoop>(new QEventLoop());
req.get()->m_pWebEngineView->page()->runJavaScript(req.get()->m_strJSFuncSignature, [loop](const QVariant& val) {
if (loop->isRunning()) {
loop->quit();
}
});
loop->exec(QEventLoop::AllEvents | QEventLoop::WaitForMoreEvents);
描述:
我们正在创建一个单线程应用程序,它读取 XML 文件并创建 HTML/Js/Css UI。我正在使用 CSS 弹性布局来布置 UI 项目。在代码中,我想在cpp中同步获取计算的大小和位置。
为了实现与Javascript的同步通信,我使用了中提到的本地事件循环技术。应用挂了,Js函数根本没有调用。
观察:
在没有 QEventLoop 的情况下,所有 运行javascript 调用都在最后一个接一个地成功执行,即在程序中的所有语句都执行完之后。
使用QEventLoop,所有运行javascript调用都被调用但是相应的Js函数没有被执行。应用程序挂起,因为 运行javascript 回调未被调用。
为什么会这样?请帮忙。
找到问题了。
我在从 JS 调用的 cpp 函数中启动本地 QtEventLoop。 cpp函数中的本地QEventLoop一直没有退出,因为本地QEventLoop中调用的Js函数正在等待当前Js调用结束。有点僵局。
解决方法:
我将来自 Js 的调用排队到 cpp 到全局事件循环。
使用 Qt 5.15.2 - 同步执行 运行Javascript。
问题:
我试过了
QSharedPointer<QEventLoop> loop = QSharedPointer<QEventLoop>(new QEventLoop());
req.get()->m_pWebEngineView->page()->runJavaScript(req.get()->m_strJSFuncSignature, [loop](const QVariant& val) {
if (loop->isRunning()) {
loop->quit();
}
});
loop->exec(QEventLoop::AllEvents | QEventLoop::WaitForMoreEvents);
描述:
我们正在创建一个单线程应用程序,它读取 XML 文件并创建 HTML/Js/Css UI。我正在使用 CSS 弹性布局来布置 UI 项目。在代码中,我想在cpp中同步获取计算的大小和位置。
为了实现与Javascript的同步通信,我使用了
观察:
在没有 QEventLoop 的情况下,所有 运行javascript 调用都在最后一个接一个地成功执行,即在程序中的所有语句都执行完之后。
使用QEventLoop,所有运行javascript调用都被调用但是相应的Js函数没有被执行。应用程序挂起,因为 运行javascript 回调未被调用。
为什么会这样?请帮忙。
找到问题了。 我在从 JS 调用的 cpp 函数中启动本地 QtEventLoop。 cpp函数中的本地QEventLoop一直没有退出,因为本地QEventLoop中调用的Js函数正在等待当前Js调用结束。有点僵局。
解决方法: 我将来自 Js 的调用排队到 cpp 到全局事件循环。