QGraphicsView到pdf

时间:2013-04-19 00:14:01

标签: qt qgraphicsview qgraphicsscene qpainter qprinter

我在QGraphicsView/QGraphicsScene的帮助下,在我的窗口中成功显示了一个带有滚动条进行导航的大场景。一切正常。

现在我想在pdf中渲染部分场景。要在pdf中渲染的区域应该是窗口中可见的区域以及可见区域上方和下方的矩形。

我已经尝试过了(简单来说,如果使用了水平滚动条,我就会忽略):

QPrinter myPrinter(QPrinter::ScreenResolution); 
myPrinter.setOrientation(QPrinter::Landscape);
myPrinter.setPaperSize(QPrinter::A4);
myPrinter.setOutputFormat(QPrinter::PdfFormat);
myPrinter.setPageMargins(0.0, 0.0, 0.0, 0.0, QPrinter::Point);

QPainter myPainter(&myPrinter);
m_pageWidth = myPrinter.width();
m_pageHeight = myPrinter.height();
myPainter.setViewport(0, 0, m_pageWidth, m_pageHeight);

QRectF viewRender = QRect(0.0, 0.0, m_pageWidth, m_pageHeight);

for(int i = 0; i < myScene->getNbPages(); i++)
{
    QRect viewScene = QRect(0, m_pageHeight * i, m_pageWidth, m_pageHeight);
    setSceneRect(viewScene);

    render(&myPainter, viewRender, viewScene);

    if(i + 1 < myScene->getNbPages())
        myPrinter.newPage();
}

但我没有得到预期的结果。例如,在这个函数QGraphicsView::drawBackground(QPainter *painter, const QRectF &rect)中,rect的左上角不是0,0表示第一页,而是107,98,然后是107,1585(但页面高度只有793?!),依此类推。 ..

任何人都能理解发生了什么?谢谢阅读。

1 个答案:

答案 0 :(得分:1)

http://qt-project.org/doc/qt-4.8/qgraphicsview.html#mapToScene

http://qt-project.org/doc/qt-4.8/qgraphicsview.html#mapFromScene

适当地使用其中一个,你应该得到你想要的结果。

例如,您可以尝试:

render(&myPainter, this->mapToScene(viewRender), viewScene);
// assuming this is your QGraphicsView instance

我在另一个问题中演示了如何使用它:

How to draw a point (on mouseclick) on a QGraphicsScene?

希望有所帮助。