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. Qprinter scaled
Forum Updated to NodeBB v4.3 + New Features

Qprinter scaled

Scheduled Pinned Locked Moved Unsolved General and Desktop
3 Posts 2 Posters 355 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 Extensions
        • Unsolved