Hi,
I am trying to printing the QGraphicsScene on a A4 size paper. My QGraphicsScene is of size QRectF(0,0 1250x819200). When I am trying to printing the whole scene on single page it comes. However, it is very small & items on the printing become very small & cannot be viewed properly.
Hence, I tried to divide the scene and print into multiple pages. It is working partially. However entire scene is not getting printed.
I would be great if anybody could help me on this issue.
Please find my code sniffet below.
#include <QApplication>
#include<QGraphicsScene>
#include<QGraphicsView>
#include<QPrinter>
#include<QPrintDialog>
#include<QPainter>
#include<QDebug>
int main(int argc, char *argv[])
{
QApplication app(argc, argv);
QPrinter *printer=new QPrinter(QPrinter::HighResolution);
printer->setPageSize(QPrinter::A4);
QWidget *widget=new QWidget;
QGraphicsScene *scene=new QGraphicsScene(QRectF(0,0,1250,819200),widget);
qDebug()<<"printer->pageRect().width() "<<printer->pageRect().width();
qDebug()<<"printer->paperRect().width() "<<printer->paperRect().width();
qDebug()<<"printer->pageRect().height() "<<printer->pageRect().height();
qDebug()<<"printer->paperRect().height() "<<printer->paperRect().height();
qDebug()<<"scene->width() "<<scene->width();
qDebug()<<"scene->height() "<<scene->height();
if (QPrintDialog(printer).exec() == QDialog::Accepted) {
QPainter painter(printer);
/*painter.setRenderHint(QPainter::Antialiasing);
view =QRect(0,0,printer->pageRect().width(),printer->paperRect().height()));
painter.setViewport(view);
painter.scale(8.0,8.0);
// scene->render(&painter,QRectF(0,0,scene->width(),printer->paperRect().height()),QRectF(0,0,scene->width(),printer->paperRect().height()));
//scene->render(&painter,QRectF(0,0,printer->pageRect().width(),printer->paperRect().height()),QRectF(0,0,printer->pageRect().width(),printer->paperRect().height()));
scene->render(&painter,QRectF(view),QRectF(view));
printer->newPage();*/
QRect view =QRect(0,0,printer->pageRect().width(),printer->pageRect().height());
QRect targetView =QRect(0,0,printer->pageRect().width(),printer->pageRect().height());
int paperNums=scene->height()/printer->paperRect().height()+1;
qDebug()<<"paperNums :: "<<paperNums ;
painter.setRenderHint(QPainter::Antialiasing);
QGraphicsView gview(scene);
painter.scale(6.0,7.0);
qreal x1,x2,y1,y2;
x2=scene->width();
y2=printer->pageRect().height();
int paperCount=1;
do{
painter.setViewport(view);
qDebug()<<"scene->sceneRect() :: "<<scene->sceneRect();
gview.setSceneRect(0,y1,x2,y2);
qDebug()<<" gview :: scenerects >>>>>> "<<gview.sceneRect() <<" at paper >>>>>> "<<paperCount;
gview.render(&painter,QRectF(view),targetView);
paperCount++;
y1=y1+printer->pageRect().height();
y2=y2+printer->pageRect().height();
view.setRect(0,y1,x2,y2);
//targetView.setRect(0,y1,x2,y2);
printer->newPage();
}while(paperCount<paperNums);
}
app.setStyle("windows");
return app.exec();
}
Bookmarks