使用QPrinter在绘图仪上打印真正巨大的图像

时间:2016-08-01 14:47:05

标签: qt printing qgraphicsscene qpainter qprinter

我必须在绘图仪世界地图上打印,其中包含来自基于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发送数据并清除其缓存,但保持在同一个打印会话中?

0 个答案:

没有答案