PDA

View Full Version : Printing of QGraphicsScene/QGraphicsView



shravan
8th October 2010, 09:39
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();
}

lyuts
8th October 2010, 14:48
Wrap you source code with code tags please.

shravan
9th October 2010, 09:08
#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();

printer->newPage();


}while(paperCount<paperNums);

}

app.setStyle("windows");

return app.exec();
}