Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt Extensions
  • Unsolved
Collapse
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. print preview widget
Forum Update on Monday, May 27th 2025

print preview widget

Scheduled Pinned Locked Moved Solved General and Desktop
21 Posts 2 Posters 8.8k Views
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • R Offline
    R Offline
    rest
    wrote on last edited by
    #1

    like anyone has an example with how to use print preview widget?
    i'm having a main window that has a widget where in paint event i draw some shape, this widget where i draw being in a layout, and i wanna make something like when i trigger and paint action to get the preview like an raport.
    i tried something like this, idk i should make another widget? idk understand how they work
    void MainWindow::on_actionPrint_triggered()
    {
    QPrinter *printer = new QPrinter(QPrinter::PrinterResolution);
    printer->setOutputFormat(QPrinter::PdfFormat);
    printer->setOutputFileName("sample.pdf");
    printer->setPaperSize(QPrinter::A4);
    printer->setFullPage(true);
    printer->setResolution(300);
    QPrintPreviewWidget *preview = new QPrintPreviewWidget(printer,ui->drawGraphicView);
    preview->print();
    }

    1 Reply Last reply
    0
    • mrjjM Offline
      mrjjM Offline
      mrjj
      Lifetime Qt Champion
      wrote on last edited by
      #2

      @rest said in print preview widget:

      QPrintPreviewWidget

      Hi
      Sample here
      https://stackoverflow.com/questions/3827873/how-to-embedded-the-print-preview-dialog-in-qt

      key point is paintRequested
      connect(preview, SIGNAL(paintRequested(QPrinter*)), report, SLOT(Print(QPrinter*)));

      and you then print what you want in Print(..) ( can be named anything)

      Note that you can ask a widget to paint somewhere else using the render() method.

      R 1 Reply Last reply
      3
      • mrjjM mrjj

        @rest said in print preview widget:

        QPrintPreviewWidget

        Hi
        Sample here
        https://stackoverflow.com/questions/3827873/how-to-embedded-the-print-preview-dialog-in-qt

        key point is paintRequested
        connect(preview, SIGNAL(paintRequested(QPrinter*)), report, SLOT(Print(QPrinter*)));

        and you then print what you want in Print(..) ( can be named anything)

        Note that you can ask a widget to paint somewhere else using the render() method.

        R Offline
        R Offline
        rest
        wrote on last edited by
        #3
        This post is deleted!
        1 Reply Last reply
        0
        • R Offline
          R Offline
          rest
          wrote on last edited by rest
          #4

          @mrjj solved, but the size of the preview i can't change it and is in the same line as the toolbar from where i do the printaction, where could be the problem?

          mrjjM 1 Reply Last reply
          1
          • R rest

            @mrjj solved, but the size of the preview i can't change it and is in the same line as the toolbar from where i do the printaction, where could be the problem?

            mrjjM Offline
            mrjjM Offline
            mrjj
            Lifetime Qt Champion
            wrote on last edited by mrjj
            #5

            @rest
            Super.
            The widgets render in the size they have/are.
            If you want it bigger, you could print to image and scale it.
            You can maybe even do it directly with render and painter.scale but
            i never tested this.

            void MainWindow::printshot() {
              QPixmap pix = QPixmap::grabWindow(QApplication::desktop()->winId());
              QPrinter printer(QPrinter::HighResolution);
              printer.setOrientation(QPrinter::Landscape);
            
              QPainter painter;
              painter.begin(&printer);
              double xscale = printer.pageRect().width() / double(pix.width());
              double yscale = printer.pageRect().height() / double(pix.height());
              double scale = qMin(xscale, yscale);
              painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
                                printer.paperRect().y() + printer.pageRect().height() / 2);
              painter.scale(scale, scale);
              painter.translate(-width() / 2, -height() / 2); // note uses the form width/height! use pix.h/w if random image
              painter.drawPixmap(0, 0, pix);
              painter.end();
            }
            

            If you need very high fidelity, split your paintEvent into a new function taking a QPainter *
            and call it for printing too. That way you can scale to use the full DPI of the printer.

            • and is in the same line as the toolbar from where i do the printaction
              I do not understand this line :)
            R 1 Reply Last reply
            3
            • mrjjM mrjj

              @rest
              Super.
              The widgets render in the size they have/are.
              If you want it bigger, you could print to image and scale it.
              You can maybe even do it directly with render and painter.scale but
              i never tested this.

              void MainWindow::printshot() {
                QPixmap pix = QPixmap::grabWindow(QApplication::desktop()->winId());
                QPrinter printer(QPrinter::HighResolution);
                printer.setOrientation(QPrinter::Landscape);
              
                QPainter painter;
                painter.begin(&printer);
                double xscale = printer.pageRect().width() / double(pix.width());
                double yscale = printer.pageRect().height() / double(pix.height());
                double scale = qMin(xscale, yscale);
                painter.translate(printer.paperRect().x() + printer.pageRect().width() / 2,
                                  printer.paperRect().y() + printer.pageRect().height() / 2);
                painter.scale(scale, scale);
                painter.translate(-width() / 2, -height() / 2); // note uses the form width/height! use pix.h/w if random image
                painter.drawPixmap(0, 0, pix);
                painter.end();
              }
              

              If you need very high fidelity, split your paintEvent into a new function taking a QPainter *
              and call it for printing too. That way you can scale to use the full DPI of the printer.

              • and is in the same line as the toolbar from where i do the printaction
                I do not understand this line :)
              R Offline
              R Offline
              rest
              wrote on last edited by
              #6

              @mrjj thank you so much but solved it last night, was just a problem when i was using the constructor for the printpreview

              R 1 Reply Last reply
              2
              • R rest

                @mrjj thank you so much but solved it last night, was just a problem when i was using the constructor for the printpreview

                R Offline
                R Offline
                rest
                wrote on last edited by
                #7

                @mrjj but question, when i trigger print i should get an sample.pdf saved somewherE?

                mrjjM 1 Reply Last reply
                0
                • R rest

                  @mrjj but question, when i trigger print i should get an sample.pdf saved somewherE?

                  mrjjM Offline
                  mrjjM Offline
                  mrjj
                  Lifetime Qt Champion
                  wrote on last edited by
                  #8

                  @rest
                  yes if u set the filename and type to pdf
                  printer.setOutputFormat(QPrinter::PdfFormat);
                  printer.setOutputFileName(filename);

                  1 Reply Last reply
                  2
                  • R Offline
                    R Offline
                    rest
                    wrote on last edited by
                    #9

                    @mrjj , i set all this in an action print preview where i have also preview->print;
                    preview->show . but i dont get an pdf saved nowhere

                    1 Reply Last reply
                    0
                    • mrjjM Offline
                      mrjjM Offline
                      mrjj
                      Lifetime Qt Champion
                      wrote on last edited by mrjj
                      #10

                      @mrjj said in print preview widget:

                      printer.setOutputFileName(filename);

                      you control where with setOutputFileName
                      make sure to use / and not \ for the full path to the file

                      1 Reply Last reply
                      1
                      • R Offline
                        R Offline
                        rest
                        wrote on last edited by
                        #11

                        void MainWindow::on_actionPrint_triggered()
                        {
                        QPrinter *printer = new QPrinter(QPrinter::HighResolution);
                        printer->setOutputFormat(QPrinter::PdfFormat);

                        printer->setPaperSize(QPrinter::A4);
                        printer->setOrientation(QPrinter::Landscape);
                        printer->setFullPage(true);
                        //printer->setResolution(100);
                        printer->setOutputFileName("Desktop//aaaa.pdf");

                        QPrintPreviewWidget *preview =0;
                        preview = new QPrintPreviewWidget(printer,preview);

                        preview->print();

                        connect(preview, SIGNAL(paintRequested(QPrinter*)),allWorkspaceShapes[currentIndex]->drawShape,SLOT(Print(QPrinter*)));

                        preview->show();

                        }

                        i used this and still didn't get anything, i have another problem in the code maybe?

                        mrjjM 1 Reply Last reply
                        0
                        • R rest

                          void MainWindow::on_actionPrint_triggered()
                          {
                          QPrinter *printer = new QPrinter(QPrinter::HighResolution);
                          printer->setOutputFormat(QPrinter::PdfFormat);

                          printer->setPaperSize(QPrinter::A4);
                          printer->setOrientation(QPrinter::Landscape);
                          printer->setFullPage(true);
                          //printer->setResolution(100);
                          printer->setOutputFileName("Desktop//aaaa.pdf");

                          QPrintPreviewWidget *preview =0;
                          preview = new QPrintPreviewWidget(printer,preview);

                          preview->print();

                          connect(preview, SIGNAL(paintRequested(QPrinter*)),allWorkspaceShapes[currentIndex]->drawShape,SLOT(Print(QPrinter*)));

                          preview->show();

                          }

                          i used this and still didn't get anything, i have another problem in the code maybe?

                          mrjjM Offline
                          mrjjM Offline
                          mrjj
                          Lifetime Qt Champion
                          wrote on last edited by mrjj
                          #12

                          @rest said in print preview widget:
                          That is NOT a valid path
                          setOutputFileName("Desktop//aaaa.pdf");

                          Please use a valid full path and only single /

                          like
                          C:/Users/SOMEUSERNAME/Desktop/test.pdf

                          1 Reply Last reply
                          1
                          • R Offline
                            R Offline
                            rest
                            wrote on last edited by
                            #13

                            printer->setOutputFileName("C:/Users/admin/Desktop/test.pdf");
                            i tried and nothing :(

                            mrjjM 1 Reply Last reply
                            0
                            • R rest

                              printer->setOutputFileName("C:/Users/admin/Desktop/test.pdf");
                              i tried and nothing :(

                              mrjjM Offline
                              mrjjM Offline
                              mrjj
                              Lifetime Qt Champion
                              wrote on last edited by mrjj
                              #14

                              @rest

                              and you do have write access there ?
                              and the path IS real. meaning u didnt make up the admin name.

                              1 Reply Last reply
                              0
                              • R Offline
                                R Offline
                                rest
                                wrote on last edited by
                                #15

                                @mrjj and then i used this and still does not work
                                printer->setOutputFileName("C:/Users/Public/Public Documents/test.pdf");

                                mrjjM 1 Reply Last reply
                                0
                                • R rest

                                  @mrjj and then i used this and still does not work
                                  printer->setOutputFileName("C:/Users/Public/Public Documents/test.pdf");

                                  mrjjM Offline
                                  mrjjM Offline
                                  mrjj
                                  Lifetime Qt Champion
                                  wrote on last edited by
                                  #16

                                  @rest
                                  and it does show stuff in preview ?
                                  but the file is NOT created?

                                  1 Reply Last reply
                                  0
                                  • R Offline
                                    R Offline
                                    rest
                                    wrote on last edited by
                                    #17

                                    exactly, it shows but it's not saved

                                    mrjjM 1 Reply Last reply
                                    0
                                    • R rest

                                      exactly, it shows but it's not saved

                                      mrjjM Offline
                                      mrjjM Offline
                                      mrjj
                                      Lifetime Qt Champion
                                      wrote on last edited by
                                      #18

                                      @rest
                                      and u press print inside preview ?
                                      to make it actually print and not just preview ?

                                      R 1 Reply Last reply
                                      0
                                      • mrjjM mrjj

                                        @rest
                                        and u press print inside preview ?
                                        to make it actually print and not just preview ?

                                        R Offline
                                        R Offline
                                        rest
                                        wrote on last edited by
                                        #19

                                        @mrjj solved, i had make the print preview and printer object in the constructor of the window

                                        mrjjM 1 Reply Last reply
                                        0
                                        • R rest

                                          @mrjj solved, i had make the print preview and printer object in the constructor of the window

                                          mrjjM Offline
                                          mrjjM Offline
                                          mrjj
                                          Lifetime Qt Champion
                                          wrote on last edited by
                                          #20

                                          @rest
                                          oh, so moving them helped?

                                          R 1 Reply Last reply
                                          0

                                          • Login

                                          • Login or register to search.
                                          • First post
                                            Last post
                                          0
                                          • Categories
                                          • Recent
                                          • Tags
                                          • Popular
                                          • Users
                                          • Groups
                                          • Search
                                          • Get Qt Extensions
                                          • Unsolved