QWebFrame在单独的线程中打印

时间:2012-11-19 18:27:34

标签: multithreading qt printing qwebpage

在我的qt应用程序中,我正在从QWebFrame(来自QWebPage的mainFrame)打印一些大的html代码。 html代码包含一些内嵌图像,需要一段时间才能打印出来。因此,我试图将打印调用放入一个单独的线程,以保持gui响应。正如文档中所提到的,我认为这应该是可能的(Painting in threads)

但我仍然得到着名的“QPixmap:在GUI线程之外使用pixmaps是不安全的”

我要打印的代码如下:

void PrintDialog::paintRequested(QPrinter *printer) {
  futureWatcher = new QFutureWatcher<void>();
  QEventLoop q;
  connect(futureWatcher, SIGNAL(finished()), &q, SLOT(quit()), Qt::UniqueConnection);
  futureWatcher->setFuture(QtConcurrent::run(m_webPage->mainFrame(), &QWebFrame::print, printer));
  q.exec();
}

澄清所有对象驻留在gui线程中并且之前生成html。图像内联如下:

QImage image
QByteArray ba;
QBuffer buffer(&ba);
buffer.open(QIODevice::WriteOnly);
image.save(&buffer, "PNG");

QString html = "<img src=\"data:image/png;base64," + QString(ba.toBase64() + "\"/>";

那我在这里做错了什么?是QWebFrame内部使用了一些QPixmaps吗?有没有在另一个线程中使用QWebFrame :: print调用的解决方案?

0 个答案:

没有答案