print preview

This commit is contained in:
2020-02-13 17:28:18 +01:00
parent 773ab14a5d
commit fd1e401c80
3 changed files with 156 additions and 38 deletions
+87 -18
View File
@@ -13,9 +13,12 @@
#include <QPrinter>
#include <QPrinterInfo>
#include <QPrintDialog>
#include <QPrintPreviewWidget>
#include <QPageSetupDialog>
#include <QPainter>
#include <QDebug>
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<cFileViewer*>(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<cFileViewer*>(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);
// }
}
+29 -5
View File
@@ -14,6 +14,7 @@
#include <QStandardItemModel>
#include <QPrinter>
#include <QPrintPreviewWidget>
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
+40 -15
View File
@@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>400</width>
<height>300</height>
<width>578</width>
<height>427</height>
</rect>
</property>
<property name="windowTitle">
@@ -15,22 +15,40 @@
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="0">
<layout class="QVBoxLayout" name="verticalLayout">
<layout class="QVBoxLayout" name="verticalLayout" stretch="1,0">
<item>
<widget class="QComboBox" name="m_lpPrinterSelect"/>
</item>
<item>
<spacer name="verticalSpacer">
<widget class="QSplitter" name="m_lpSplitter">
<property name="orientation">
<enum>Qt::Vertical</enum>
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
<widget class="QWidget" name="">
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
<widget class="QComboBox" name="m_lpPrinterSelect"/>
</item>
<item>
<widget class="QLabel" name="m_lpPrinterMakeAndModel">
<property name="text">
<string/>
</property>
</widget>
</item>
<item>
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</widget>
</item>
<item>
<layout class="QHBoxLayout" name="horizontalLayout">
@@ -41,6 +59,13 @@
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpPrintPreview">
<property name="text">
<string>preview</string>
</property>
</widget>
</item>
<item>
<widget class="QPushButton" name="m_lpPrint">
<property name="text">