Skip to content
  • Categories
  • Recent
  • Tags
  • Popular
  • Users
  • Groups
  • Search
  • Get Qt
  • Unsolved
Collapse
qtws26_logo

The Qt Event of the Year: Qt World Summit 2026

Save Your Spot >
Brand Logo
  1. Home
  2. Qt Development
  3. General and Desktop
  4. Qprinter scaled
Qt 6.12 LTS is out! See what's new in the release blog

Qprinter scaled

Scheduled Pinned Locked Moved Unsolved General and Desktop
3 Posts 2 Posters 638 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.
  • I Offline
    I Offline
    IknowQT
    wrote on last edited by IknowQT
    #1
    void ExChart::BtnPrinter()
    {
        /*QPrinter printer(QPrinter::HighResolution);
        QPrintDialog dialog(&printer, this);
        if (dialog.exec() != QDialog::Accepted)
            return;*/
    
        QPrinter printer(QPrinter::HighResolution);
        printer.setFullPage(true);
    
        QPrintPreviewDialog preview(&printer, this);
        connect(&preview, &QPrintPreviewDialog::paintRequested, this, &ExChart::PrintPreview);
        preview.setFixedSize(this->size());
        //connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPreview(QPrinter*)));
        preview.exec();
    }
    
    void ExChart::PrintPreview(QPrinter* printer)
    {
        QPainter* painter = new QPainter(printer);
        painter->begin(printer);
        int ratio = 2;
        // 페인터의 뷰포트 영역을 설정하여 rect에 대입
    	QRect rect = painter->viewport();
        QSize size = this->m_pChartViewer->size();
        size.scale(rect.size(), Qt::KeepAspectRatio);
        painter->setViewport(rect.x(), rect.y(), size.width() , size.height() );
        painter->setWindow(rect.x(), rect.y(), size.width()*0.4, size.height() * 0.4); // 0.4
    
        QPixmap buffer = QPixmap::grabWidget(this->m_pChartViewer);
        buffer.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
        // buffer를 인쇄 미리보기 창에 출력
        painter->drawPixmap(0, 0, buffer);
        painter->end();
    }
    

    03b2a1b7-3e8f-4dcc-8439-c00d6994eef6-image.png

    Is there a way to fit it in a horizontal size?
    I don't know what setviewport and setwindow do.

    Another official document states that QPixmap::grabWidget is no longer used, is there an alternative?

    eyllanescE 1 Reply Last reply
    0
    • I IknowQT
      void ExChart::BtnPrinter()
      {
          /*QPrinter printer(QPrinter::HighResolution);
          QPrintDialog dialog(&printer, this);
          if (dialog.exec() != QDialog::Accepted)
              return;*/
      
          QPrinter printer(QPrinter::HighResolution);
          printer.setFullPage(true);
      
          QPrintPreviewDialog preview(&printer, this);
          connect(&preview, &QPrintPreviewDialog::paintRequested, this, &ExChart::PrintPreview);
          preview.setFixedSize(this->size());
          //connect(&preview, SIGNAL(paintRequested(QPrinter*)), SLOT(printPreview(QPrinter*)));
          preview.exec();
      }
      
      void ExChart::PrintPreview(QPrinter* printer)
      {
          QPainter* painter = new QPainter(printer);
          painter->begin(printer);
          int ratio = 2;
          // 페인터의 뷰포트 영역을 설정하여 rect에 대입
      	QRect rect = painter->viewport();
          QSize size = this->m_pChartViewer->size();
          size.scale(rect.size(), Qt::KeepAspectRatio);
          painter->setViewport(rect.x(), rect.y(), size.width() , size.height() );
          painter->setWindow(rect.x(), rect.y(), size.width()*0.4, size.height() * 0.4); // 0.4
      
          QPixmap buffer = QPixmap::grabWidget(this->m_pChartViewer);
          buffer.scaled(size, Qt::KeepAspectRatio, Qt::SmoothTransformation);
          // buffer를 인쇄 미리보기 창에 출력
          painter->drawPixmap(0, 0, buffer);
          painter->end();
      }
      

      03b2a1b7-3e8f-4dcc-8439-c00d6994eef6-image.png

      Is there a way to fit it in a horizontal size?
      I don't know what setviewport and setwindow do.

      Another official document states that QPixmap::grabWidget is no longer used, is there an alternative?

      eyllanescE Offline
      eyllanescE Offline
      eyllanesc
      wrote on last edited by
      #2

      @IknowQT Try with:

          void ExChart::PrintPreview(QPrinter *printer){
              QPainter painter(printer);
              painter.begin(printer);
              QRect rect = painter.viewport();
              QPixmap buffer = m_pChartViewer->grab();
              painter.drawPixmap(0, 0, buffer.scaled(rect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
              painter.end();
          }
      

      If you want me to help you develop some work then you can write to my email: e.yllanescucho@gmal.com.

      I 1 Reply Last reply
      1
      • eyllanescE eyllanesc

        @IknowQT Try with:

            void ExChart::PrintPreview(QPrinter *printer){
                QPainter painter(printer);
                painter.begin(printer);
                QRect rect = painter.viewport();
                QPixmap buffer = m_pChartViewer->grab();
                painter.drawPixmap(0, 0, buffer.scaled(rect.size(), Qt::KeepAspectRatio, Qt::SmoothTransformation));
                painter.end();
            }
        
        I Offline
        I Offline
        IknowQT
        wrote on last edited by
        #3

        @eyllanesc
        afc33705-5be5-4f4d-8350-066f1ee8f718-image.png

        printer->setPageMargins(3, 3, 3, 3, QPrinter::Millimeter);
        

        What's wrong with the margin that doesn't apply to the preview?

        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
        • Unsolved