1

Qtベースのアプリから、多くのベクターデータを含むプロッターの世界地図に印刷する必要があります。Plotter には 80 GB のハード ドライブがあり、高解像度のイメージを印刷できます。すべてのデータは QGraphicsScene にロードされます。

QGraphicsScene *scene;

.....

QPrinter *printer = new QPrinter(QPrinter::ScreenResolution);
printer->setPaperSize(QPrinter::A4);

QPainter painter(printer);
painter.setRenderHint(QPainter::Antialiasing);

A4は、テスト中の速度を向上させるために使用しています。

forever
{
   if(printedHeight >= sceneHeight)
   {
       isPrintingRunning = false;
       qDebug() << "Printing finished";
       break;
   }

   ...loading next tile strip

   scene->render(&painter, toPage(sceneRect), tileStripRect);
   scene->clearStrip;
   printedHeight += stripHeight;
}

ベクターデータをロードした後、水平ストリップでタイル(256x256 px)をロードし、ストリップをペインターにレンダリングし、シーンからタイルをクリアします。ストリップシーンでレンダリングしているため、使用可能なメモリを超えていませんが、QPainter は削除されるまでデータをプリンターに送信しません。そのため、アプリはすぐにメモリ不足になります。各サイクルステップで QPainter::end() を呼び出す機会がありますが、この方法では各ストリップが通常のプリンターの異なるページに印刷されるため、プロッターのナイフを制御できなくなるとすぐに、プロッターは各ストリップをカットすると思います. したがって、これは解決策ではありません。QPainter にデータを送信させてキャッシュをクリアさせながら、同じ印刷セッションを維持するにはどうすればよいですか?

4

0 に答える 0