2013-04-19 2 views
0

큰 창을 내 창에 성공적으로 표시하려면 탐색 용 스크롤 막대가있는 QGraphicsView/QGraphicsScene을 사용하십시오. 모든 것이 잘 작동합니다.QGraphicsView to pdf

이제는 장면의 일부를 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

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?

희망을.

+0

답변 해 주셔서 감사합니다. 사실 좌표에 문제가있는 것 같습니다. 그 방향으로 가고있었습니다. 당신이 제안하는 것이 지금은 아무 것도 바뀌지는 않지만 ... – Ote

+0

동일한 변수에서 mapFromScene을 사용하는 것은 어떻습니까? 또는 viewScene 변수에? – phyatt

+0

'drawBackground (QPainter * painter, const QRectF & rect)'rect의 왼쪽 상단 구석이 107, 0.00007이고 너비가 66000000이고 높이가 7600000이기 때문에 확실히 mapFromScene이 아닙니다 ... 나는 그걸로 미쳐 가고 있습니다. – Ote