C++ QT应用程序在QImage上呈现QWebElement时挂起

C++ QT应用程序在QImage上呈现QWebElement时挂起,c++,qt,C++,Qt,我正在使用QWebPage类在我的QT应用程序的后台加载一个页面。 每当它发出“RepaitReqest”时,我都会尝试将主框架的内容渲染到画家(QImage)上 使用如下代码: QWebpage page; QImage m_image onRepaintRequest(){ QMutexLocker locker(&mutex); QPainter painter(m_image); page.mainFrame()->documentElement(

我正在使用QWebPage类在我的QT应用程序的后台加载一个页面。 每当它发出“RepaitReqest”时,我都会尝试将主框架的内容渲染到画家(QImage)上 使用如下代码:

QWebpage page;
QImage m_image

onRepaintRequest(){
    QMutexLocker locker(&mutex);
    QPainter painter(m_image);
    page.mainFrame()->documentElement().render(&painter)
}
我的应用程序有时会在
render
函数调用时随机挂起。
我确保任何其他线程都不会访问
m_image

这种行为的原因可能是什么

编辑::如果我在QWebPage内部更新时在主框架上调用render,会导致挂起吗?这是QT应该在内部处理的问题。

  • 为什么
    page.mainFrame()->documentElement().render(&painter)
    而不是
    page.mainFrame()->render(&painter)

  • 如文档中所述,使用
    void QWebFrame::render(QPainter*painter,const QRegion&clip)
    表单避免渲染无休止的循环


此函数是否在主线程中执行?@alexisdm yes…QWebpage和OnRepaitRequest在主线程上。我还尝试在主线程上创建QWebpage,并将其引用传递给另一个线程上的对象。然后,我在单独的线程上接收到重绘事件,但“有时应用程序在渲染时挂起”的问题仍然存在-(我不想等待loadFinished信号。我需要在后台运行javascript,当页面动态更改时,只会发出重新绘制请求的信号。因此,我正在更新重新绘制请求中的图像缓冲区。使用“page.mainFrame()->render(&painter)”,神秘的随机应用程序挂起仍然存在。:(嗯……情况如何触发“OnRepaitRequest”?执行渲染可能会触发页面的重新显示。这可能会触发触发“OnRepaitRequest”的javascript吗“导致循环?这是触发RepaitRequest的信号。您的评论很有意义,但提到的文档链接说,我可以在收到RepaitRequest信号时调用render。此外,在当前场景中,不会对页面进行动态修改。我正在尝试加载google.com,在调用render时遇到问题。”。