首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QWebEngine:同步执行runJavascript - QEventLoop阻止Javascript调用

QWebEngine:同步执行runJavascript - QEventLoop阻止Javascript调用
EN

Stack Overflow用户
提问于 2021-07-16 19:10:03
回答 1查看 70关注 0票数 0

使用Qt 5.15.2 -同步执行runJavascript。

问题:

我尝试将QtWebEngine - synchronously execute JavaScript to read function result作为一个单独的应用程序,它工作得很好,一切都像预期的那样。但是在我的eventLoop->exec()项目中,JS函数没有被执行(调用了runJavascript)。

代码语言: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 flex layout来布局UI项。在代码中,我希望在cpp中同步获得计算出的大小和位置。

为了实现与Javascript的同步通信,我使用了QtWebEngine - synchronously execute JavaScript to read function result中提到的本地事件循环技术。应用程序挂起,Js函数根本没有被调用。

观察:

如果没有QEventLoop,所有的runjavascript调用都会在结束时一个接一个地成功执行,也就是在程序中的所有语句执行完之后。

对于QEventLoop,所有的runjavascript调用都会被调用,但不会执行相应的Js函数。应用程序挂起,因为未调用runjavascript回调。

为什么会发生这种情况?请帮帮忙。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-08-11 13:52:28

找到了问题所在。我在从JS调用的cpp函数中启动了本地QtEventLoop。cpp函数中的本地QEventLoop不会退出,因为本地QEventLoop中调用的Js函数正在等待当前的Js调用完成。有点僵持。

解决方案:我将从Js到cpp的调用排队到全局事件循环。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68408020

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档