2

私の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 呼び出しを使用するための解決策はありますか?

4

0 に答える 0