我在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)矩形的左上角不是0,0,而是107,98,然后是107,1585 (但页面高度只有793 ?!)以此类推。
有人知道这是怎么回事吗?感谢您的阅读。
发布于 2013-04-19 08:29:58
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?
希望这能有所帮助。
https://stackoverflow.com/questions/16095169
复制相似问题