Results 1 to 3 of 3

Thread: Printing of QGraphicsScene/QGraphicsView

  1. #1
    Join Date
    Oct 2010
    Posts
    2
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Printing of QGraphicsScene/QGraphicsView

    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();
    }

  2. #2
    Join Date
    May 2008
    Location
    Kyiv, Ukraine
    Posts
    418
    Thanks
    1
    Thanked 29 Times in 27 Posts
    Qt products
    Qt4
    Platforms
    Unix/X11

    Default Re: Printing of QGraphicsScene/QGraphicsView

    Wrap you source code with code tags please.
    I'm a rebel in the S.D.G.

  3. #3
    Join Date
    Oct 2010
    Posts
    2
    Qt products
    Qt4
    Platforms
    Unix/X11 Windows

    Default Re: Printing of QGraphicsScene/QGraphicsView

    Qt Code:
    1. #include <QApplication>
    2. #include<QGraphicsScene>
    3. #include<QGraphicsView>
    4. #include<QPrinter>
    5. #include<QPrintDialog>
    6. #include<QPainter>
    7. #include<QDebug>
    8. int main(int argc, char *argv[])
    9. {
    10.  
    11. QApplication app(argc, argv);
    12. QPrinter *printer=new QPrinter(QPrinter::HighResolution);
    13. printer->setPageSize(QPrinter::A4);
    14. QWidget *widget=new QWidget;
    15.  
    16. QGraphicsScene *scene=new QGraphicsScene(QRectF(0,0,1250,819200),widget);
    17.  
    18. qDebug()<<"printer->pageRect().width() "<<printer->pageRect().width();
    19. qDebug()<<"printer->paperRect().width() "<<printer->paperRect().width();
    20. qDebug()<<"printer->pageRect().height() "<<printer->pageRect().height();
    21. qDebug()<<"printer->paperRect().height() "<<printer->paperRect().height();
    22. qDebug()<<"scene->width() "<<scene->width();
    23. qDebug()<<"scene->height() "<<scene->height();
    24.  
    25.  
    26. if (QPrintDialog(printer).exec() == QDialog::Accepted) {
    27. QPainter painter(printer);
    28.  
    29. /*painter.setRenderHint(QPainter::Antialiasing);
    30.  
    31. view =QRect(0,0,printer->pageRect().width(),printer->paperRect().height()));
    32.  
    33. painter.setViewport(view);
    34.  
    35. painter.scale(8.0,8.0);
    36. // scene->render(&painter,QRectF(0,0,scene->width(),printer->paperRect().height()),QRectF(0,0,scene->width(),printer->paperRect().height()));
    37. //scene->render(&painter,QRectF(0,0,printer->pageRect().width(),printer->paperRect().height()),QRectF(0,0,printer->pageRect().width(),printer->paperRect().height()));
    38.  
    39. scene->render(&painter,QRectF(view),QRectF(view));
    40.  
    41. printer->newPage();*/
    42.  
    43. QRect view =QRect(0,0,printer->pageRect().width(),printer->pageRect().height());
    44.  
    45. QRect targetView =QRect(0,0,printer->pageRect().width(),printer->pageRect().height());
    46.  
    47.  
    48. int paperNums=scene->height()/printer->paperRect().height()+1;
    49.  
    50.  
    51. qDebug()<<"paperNums :: "<<paperNums ;
    52.  
    53.  
    54.  
    55. painter.setRenderHint(QPainter::Antialiasing);
    56.  
    57.  
    58.  
    59. QGraphicsView gview(scene);
    60. painter.scale(6.0,7.0);
    61.  
    62. qreal x1,x2,y1,y2;
    63.  
    64. x2=scene->width();
    65. y2=printer->pageRect().height();
    66.  
    67. int paperCount=1;
    68. do{
    69. painter.setViewport(view);
    70. qDebug()<<"scene->sceneRect() :: "<<scene->sceneRect();
    71.  
    72. gview.setSceneRect(0,y1,x2,y2);
    73.  
    74. qDebug()<<" gview :: scenerects >>>>>> "<<gview.sceneRect() <<" at paper >>>>>> "<<paperCount;
    75.  
    76.  
    77. gview.render(&painter,QRectF(view),targetView);
    78.  
    79.  
    80. paperCount++;
    81.  
    82. y1=y1+printer->pageRect().height();
    83. y2=y2+printer->pageRect().height();
    84.  
    85. printer->newPage();
    86.  
    87.  
    88. }while(paperCount<paperNums);
    89.  
    90. }
    91.  
    92. app.setStyle("windows");
    93.  
    94. return app.exec();
    95. }
    To copy to clipboard, switch view to plain text mode 

Similar Threads

  1. QGraphicsView and QGraphicsScene
    By alisami in forum Qt Programming
    Replies: 8
    Last Post: 4th December 2008, 10:10
  2. Rotating Printing of QGraphicsScene
    By init2null in forum Qt Programming
    Replies: 4
    Last Post: 22nd March 2008, 02:42
  3. 1:1 printing with QGraphicsView
    By joshlareau in forum Qt Programming
    Replies: 1
    Last Post: 25th September 2007, 16:34
  4. QGraphicsScene and QGraphicsView
    By sabeesh in forum Qt Programming
    Replies: 7
    Last Post: 1st August 2007, 06:59
  5. QGraphicsScene and QGraphicsView
    By rossd in forum Qt Programming
    Replies: 2
    Last Post: 25th April 2007, 14:43

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •  
Qt is a trademark of The Qt Company.