我必须在绘图仪世界地图上打印,其中包含来自基于Qt的app的大量矢量数据。绘图仪有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像素),向画家渲染条带,从场景中清除图块,而不是再次。因为我通过条带场景渲染并不会超出可用内存,但QPainter不会将数据发送到打印机,直到它被删除,这就是为什么我的应用程序很快耗尽内存的原因。有机会在每个循环步骤中调用QPainter :: end(),但是这样每个条带都打印在普通打印机上的不同页面上,所以我想绘图仪会切割每个条带,只要我无法控制绘图仪的刀。所以这不是解决方案。如何强制QPainter发送数据并清除其缓存,但保持在同一个打印会话中?