From fd1e401c803530a167a5cde5b3161d0894827de7 Mon Sep 17 00:00:00 2001 From: Herwig Birke Date: Thu, 13 Feb 2020 17:28:18 +0100 Subject: [PATCH] print preview --- cprint.cpp | 105 ++++++++++++++++++++++++++++++++++++++++++++--------- cprint.h | 34 ++++++++++++++--- cprint.ui | 55 ++++++++++++++++++++-------- 3 files changed, 156 insertions(+), 38 deletions(-) diff --git a/cprint.cpp b/cprint.cpp index f718fc8..ac2b75b 100644 --- a/cprint.cpp +++ b/cprint.cpp @@ -13,9 +13,12 @@ #include #include #include +#include #include #include +#include + cPrint::cPrint(QProgressBar* lpProgressBar, QListView* lpSelectedList, QStandardItemModel* lpSelectedListModel, QWidget *parent) : QWidget(parent), @@ -31,28 +34,66 @@ cPrint::cPrint(QProgressBar* lpProgressBar, QListView* lpSelectedList, QStandard QString defaultPrinter = QPrinterInfo::defaultPrinterName(); QStringList availablePrinters = QPrinterInfo::availablePrinterNames(); + m_lpPrinter->setPrinterName(defaultPrinter); + onPrinterChanged(defaultPrinter); + ui->m_lpPrinterSelect->addItems(availablePrinters); ui->m_lpPrinterSelect->setCurrentText(defaultPrinter); - connect(ui->m_lpPrinterSettings, &QPushButton::clicked, this, &cPrint::onPrinterSettings); - connect(ui->m_lpPrint, &QPushButton::clicked, this, &cPrint::onPrint); + m_lpPrintPreviewWidget = new QPrintPreviewWidget(m_lpPrinter, this); + m_lpPrintPreviewWidget->setObjectName(QString::fromUtf8("m_lpPrintPreviewWidget")); + ui->m_lpSplitter->insertWidget(0, m_lpPrintPreviewWidget); + + connect(ui->m_lpPrinterSelect, &QComboBox::currentTextChanged, this, &cPrint::onPrinterChanged); + connect(ui->m_lpPrinterSettings, &QPushButton::clicked, this, &cPrint::onPrinterSettings); + connect(ui->m_lpPrintPreview, &QPushButton::clicked, this, &cPrint::onPrintPreview); + connect(ui->m_lpPrint, &QPushButton::clicked, this, &cPrint::onPrint); + + connect(m_lpPrintPreviewWidget, &QPrintPreviewWidget::paintRequested, this, &cPrint::onPaintRequested); } cPrint::~cPrint() { + if(m_lpPrintPreviewWidget) + delete m_lpPrintPreviewWidget; + if(m_lpPrinter) delete m_lpPrinter; delete ui; } -void cPrint::onPrinterSettings() +void cPrint::onPrinterChanged(const QString& printer) { - QPageSetupDialog pageSetupDialog(m_lpPrinter); - pageSetupDialog.exec(); + m_lpPrinter->setPrinterName(printer); + + QPrinterInfo printerInfo(*m_lpPrinter); + + ui->m_lpPrinterMakeAndModel->setText(printerInfo.makeAndModel()); } -void cPrint::onPrint() +void cPrint::onPrinterSettings() +{ + QPrintDialog printDialog(m_lpPrinter); + printDialog.exec(); + +// QPageSetupDialog pageSetupDialog(m_lpPrinter); +// pageSetupDialog.exec(); +} + +void cPrint::onPrintPreview() +{ + if(!m_lpSelectedListModel->rowCount()) + return; + + cFileViewer* lpFileViewer = static_cast(m_lpSelectedList->indexWidget(m_lpSelectedListModel->index(0, 0))); + if(!lpFileViewer) + return; + + m_lpPrintPreviewWidget->updatePreview(); +} + +void cPrint::onPaintRequested(QPrinter* printer) { if(!m_lpSelectedListModel->rowCount()) return; @@ -67,18 +108,46 @@ void cPrint::onPrint() if(image.isNull()) return; + printer->newPage(); + QPixmap pixmap = QPixmap::fromImage(image); - QPrintDialog printDialog(m_lpPrinter, this); + QPainter painter(printer); + QRect rect = painter.viewport(); + QSize size = pixmap.size(); - if(printDialog.exec()) - { - QPainter painter(m_lpPrinter); - QRect rect = painter.viewport(); - QSize size = pixmap.size(); - - size.scale(rect.size(), Qt::KeepAspectRatio); - painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); - painter.setWindow(pixmap.rect()); - painter.drawPixmap(0, 0, pixmap); - } + size.scale(rect.size(), Qt::KeepAspectRatio); + painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); + painter.setWindow(pixmap.rect()); + painter.drawPixmap(0, 0, pixmap); +} + +void cPrint::onPrint() +{ +// if(!m_lpSelectedListModel->rowCount()) +// return; + +// cFileViewer* lpFileViewer = static_cast(m_lpSelectedList->indexWidget(m_lpSelectedListModel->index(0, 0))); +// if(!lpFileViewer) +// return; + +// QString fileName = lpFileViewer->fileName(); +// cImage image(fileName); + +// if(image.isNull()) +// return; + +// QPixmap pixmap = QPixmap::fromImage(image); +// QPrintDialog printDialog(m_lpPrinter, this); + +// if(printDialog.exec()) +// { +// QPainter painter(m_lpPrinter); +// QRect rect = painter.viewport(); +// QSize size = pixmap.size(); + +// size.scale(rect.size(), Qt::KeepAspectRatio); +// painter.setViewport(rect.x(), rect.y(), size.width(), size.height()); +// painter.setWindow(pixmap.rect()); +// painter.drawPixmap(0, 0, pixmap); +// } } diff --git a/cprint.h b/cprint.h index 1b5512f..c601755 100644 --- a/cprint.h +++ b/cprint.h @@ -14,6 +14,7 @@ #include #include +#include namespace Ui { @@ -45,14 +46,23 @@ public: ~cPrint(); private: - Ui::cPrint* ui; /*!< TODO: describe */ - QProgressBar* m_lpProgressBar; /*!< TODO: describe */ - QListView* m_lpSelectedList; /*!< TODO: describe */ - QStandardItemModel* m_lpSelectedListModel; /*!< TODO: describe */ + Ui::cPrint* ui; /*!< TODO: describe */ + QProgressBar* m_lpProgressBar; /*!< TODO: describe */ + QListView* m_lpSelectedList; /*!< TODO: describe */ + QStandardItemModel* m_lpSelectedListModel; /*!< TODO: describe */ - QPrinter* m_lpPrinter; /*!< TODO: describe */ + QPrinter* m_lpPrinter; /*!< TODO: describe */ + QPrintPreviewWidget* m_lpPrintPreviewWidget; /*!< TODO: describe */ private slots: + /*! + \brief + + \fn onPrinterChanged + \param printer + */ + void onPrinterChanged(const QString& printer); + /*! \brief @@ -62,9 +72,23 @@ private slots: /*! \brief + \fn onPrintPreview + */ + void onPrintPreview(); + /*! + \brief + \fn onPrint */ void onPrint(); + + /*! + \brief + + \fn onPaintRequested + \param printer + */ + void onPaintRequested(QPrinter* printer); }; #endif // CPRINT_H diff --git a/cprint.ui b/cprint.ui index 5ed1722..0e3aca8 100644 --- a/cprint.ui +++ b/cprint.ui @@ -6,8 +6,8 @@ 0 0 - 400 - 300 + 578 + 427 @@ -15,22 +15,40 @@ - + - - - - + - Qt::Vertical + Qt::Horizontal - - - 20 - 40 - - - + + + + + + + + + + + + + + + + Qt::Vertical + + + + 20 + 40 + + + + + + + @@ -41,6 +59,13 @@ + + + + preview + + +