首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >QtWebkit同步加载

QtWebkit同步加载
EN

Stack Overflow用户
提问于 2010-02-05 14:32:46
回答 4查看 4.6K关注 0票数 11

我使用的是没有QWebView的QWebView,因为我想将一个HTML文件的内容呈现到QPixmap/QImage上。

我希望页面的加载是同步的,而不是异步的,这是默认的。默认方法是调用QWebFrame::setHtml()QWebFrame::setContent(),但这会异步加载映像。我想要的是某种类型的阻塞函数调用,类似于QWebFrame::waitUntilLoadFinished(),之后我可以调用render()并完成它。

我想不出办法来做这个。我是不是遗漏了什么?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-02-05 18:24:14

如果有人感兴趣,我使用一个特殊的"PageRasterizer“类来实现它。

类在构造函数中创建一个QWebPage,并将bool加载标志设置为false。connect()调用将loadFinished信号连接到仅将加载标志设置为true的成员槽。

返回图像的特殊RenderPage()成员函数完成所有工作:它接受HTML并调用setHtml()。然后是一个等待标志的while循环;当标志为false时,调用qApp->processEvents(),从而发出信号,并最终调用标志设置槽。如果是的话,循环会中断,现在您可以将页面呈现给QImage (不要忘记在返回之前将标志设置为false )。

如果您对呈现过程感兴趣,请查看这个Qt示例 ( Thumbnailer::render()函数)。

为了获得积分,你可以让这个类成为函数式。

票数 0
EN

Stack Overflow用户

发布于 2013-05-24 17:56:54

如果有人还需要它,这就是我让它工作的方式。

代码语言:javascript
复制
mWebPage->mainFrame()->setHtml("...");
QEventLoop loop;
connect(mWebPage,SIGNAL(loadFinished(bool)),&loop,SLOT(quit()));
loop.exec();
/* your webpage has finished loading & is ready to use */
票数 8
EN

Stack Overflow用户

发布于 2010-02-08 20:31:14

我建议您以Qt的方式来完成它,并进行异步,这非常有帮助。

如果您还想在同步中执行此操作,请在单独的QEventLoop中使用QThread

有关详细的QThread使用信息,请参阅我的评论。注意:不要忘记调用moveToThread();在线程头中,否则所有信号都会通过QApplication执行循环。

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

https://stackoverflow.com/questions/2207852

复制
相关文章

相似问题

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