使用Qt 5.15.2 -同步执行runJavascript。
问题:
我尝试将QtWebEngine - synchronously execute JavaScript to read function result作为一个单独的应用程序,它工作得很好,一切都像预期的那样。但是在我的eventLoop->exec()项目中,JS函数没有被执行(调用了runJavascript)。
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 flex layout来布局UI项。在代码中,我希望在cpp中同步获得计算出的大小和位置。
为了实现与Javascript的同步通信,我使用了QtWebEngine - synchronously execute JavaScript to read function result中提到的本地事件循环技术。应用程序挂起,Js函数根本没有被调用。
观察:
如果没有QEventLoop,所有的runjavascript调用都会在结束时一个接一个地成功执行,也就是在程序中的所有语句执行完之后。
对于QEventLoop,所有的runjavascript调用都会被调用,但不会执行相应的Js函数。应用程序挂起,因为未调用runjavascript回调。
为什么会发生这种情况?请帮帮忙。
发布于 2021-08-11 13:52:28
找到了问题所在。我在从JS调用的cpp函数中启动了本地QtEventLoop。cpp函数中的本地QEventLoop不会退出,因为本地QEventLoop中调用的Js函数正在等待当前的Js调用完成。有点僵持。
解决方案:我将从Js到cpp的调用排队到全局事件循环。
https://stackoverflow.com/questions/68408020
复制相似问题