Qprinter scaled
- 
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(); }
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?
 - 
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(); }
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?
@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(); } - 
@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(); }printer->setPageMargins(3, 3, 3, 3, QPrinter::Millimeter);What's wrong with the margin that doesn't apply to the preview?
 
