在我的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调用的解决方案?