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 にデータを送信させてキャッシュをクリアさせながら、同じ印刷セッションを維持するにはどうすればよいですか?