2016-08-26 70 views
0

我有QGraphicsScene,大小爲62450x4750。有時我需要製作整個場景的截圖並將其保存到文件中。我想是這樣的:Qt 4.8,大QGraphicsScene屏幕截圖

QPixmap wholeScene(scene.sceneRect().size().toSize()); 
{ 
    QPainter wholeScenePainter(&wholeScene); 
    scene.render(&wholeScenePainter); 
} 
// saving pixmap 

QPixmap wholeScene(scene.sceneRect().size().toSize()); 
{ 
    QPainter wholeScenePainter(&wholeScene); 
    int x = 0; 
    int portion = 32768; // 
    while(x < scene.sceneRect().width()) { 
     int width = scene.sceneRect().width() - x > portion ? portion : scene.sceneRect().width() - x; 
     QRect rect(x, 0, width, scene.sceneRect().height()); 
     scene.render(&wholeScenePainter, rect, rect); 

     x += width; 
    } 
} 
// saving pixmap 

QPixmap wholeScene(scene.sceneRect().size().toSize()); 
{ 
    QPainter wholeScenePainter(&wholeScene); 
    int x = 0; 
    int portion = 4096; 
    while(x < scene.sceneRect().width()) { 
     int width = scene.sceneRect().width() - x > portion ? portion : scene.sceneRect().width() - x; 
     QRect rect(x, 0, width, scene.sceneRect().height()); 

     QPixmap temp(rect.size()); 
     QPainter p(&temp); 
     scene.render(&p, QRect(0, 0, rect.width(), rect.height()), rect); 
     wholeScenePainter.drawPixmap(x,0, temp); 
     //temp.save(QString("print%1.png").arg(QString::number(x)), "PNG"); 

     x += width; 
    } 
} 
// saving pixmap 

但每次我得到寬度上的32768像素cuted圖像(像素圖)。

回答

2

根據the documentation,QPainter不支持大於+/- 32768的座標。這也是Qt 5中的does not appear to be fixed

也許你可以通過多次渲染場景來解決這個問題,例如,通過翻譯和剪輯。您可以將場景渲染成多個最大像素數爲32768x32768的塊,並將它們放在最終圖像的適當位置。

+0

這是正確的做法。 –