1

我必须从基于 Qt 的应用程序中打印带有大量矢量数据的绘图仪世界地图。绘图仪有 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 发送数据并清除其缓存,但保持在同一个打印会话中?

4

0 回答 0