私のqtアプリケーションでは、QWebFrame(QWebPageのメインフレーム)からいくつかの大きなhtmlコードを印刷しています。HTML コードにはいくつかのインライン画像が含まれており、印刷に時間がかかります。そのため、印刷呼び出しを別のスレッドに入れて、GUI の応答性を維持しようとしました。ドキュメントで述べたように、これは可能だと思いました(スレッドでのペイント)。
しかし、私はまだ有名な「QPixmap: GUIスレッド外でピックスマップを使用するのは安全ではありません」を取得します
印刷する私のコードは次のとおりです。
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 呼び出しを使用するための解決策はありますか?