我使用的是没有QWebView的QWebView,因为我想将一个HTML文件的内容呈现到QPixmap/QImage上。
我希望页面的加载是同步的,而不是异步的,这是默认的。默认方法是调用QWebFrame::setHtml()或QWebFrame::setContent(),但这会异步加载映像。我想要的是某种类型的阻塞函数调用,类似于QWebFrame::waitUntilLoadFinished(),之后我可以调用render()并完成它。
我想不出办法来做这个。我是不是遗漏了什么?
发布于 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()函数)。
为了获得积分,你可以让这个类成为函数式。
发布于 2013-05-24 17:56:54
如果有人还需要它,这就是我让它工作的方式。
mWebPage->mainFrame()->setHtml("...");
QEventLoop loop;
connect(mWebPage,SIGNAL(loadFinished(bool)),&loop,SLOT(quit()));
loop.exec();
/* your webpage has finished loading & is ready to use */发布于 2010-02-08 20:31:14
我建议您以Qt的方式来完成它,并进行异步,这非常有帮助。
如果您还想在同步中执行此操作,请在单独的QEventLoop中使用QThread。
有关详细的QThread使用信息,请参阅我的评论。注意:不要忘记调用moveToThread();在线程头中,否则所有信号都会通过QApplication执行循环。
https://stackoverflow.com/questions/2207852
复制相似问题