print preview

This commit is contained in:
2020-02-20 17:11:18 +01:00
parent 452bf5f2e0
commit ea87ada787
3 changed files with 66 additions and 19 deletions
+5
View File
@@ -145,6 +145,11 @@ QPageSize cLayout::pageSize()
return(QPageSize(ui->m_lpPageSize->currentData().value<QPageSize::PageSizeId>()));
}
QMarginsF cLayout::pageMargins()
{
return(QMarginsF(borderLeft(), borderTop(), borderRight(), borderBottom()));
}
qreal cLayout::borderTop()
{
return(ui->m_lpBorderTop->value());
+2
View File
@@ -9,6 +9,7 @@
#include <QWidget>
#include <QPageSize>
#include <QMarginsF>
namespace Ui {
@@ -44,6 +45,7 @@ public:
qreal borderLeft();
qreal borderRight();
qreal borderBottom();
QMarginsF pageMargins();
qreal gutter();
int tilesH();
int tilesV();
+59 -19
View File
@@ -163,17 +163,12 @@ void cPrint::onPaintRequested(QPrinter* printer)
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;
QPageSize pageSize = m_lpLayout->pageSize();
QPageSize::Unit unit = m_lpLayout->unit();
QSizeF size = pageSize.size(unit);
qreal pageWidth = size.width();
qreal pageHeight = size.height();
QMarginsF pageMargins = m_lpLayout->pageMargins();
qreal borderTop = m_lpLayout->borderTop();
qreal borderLeft = m_lpLayout->borderLeft();
qreal borderRight = m_lpLayout->borderRight();
@@ -181,20 +176,65 @@ void cPrint::onPaintRequested(QPrinter* printer)
qreal gutter = m_lpLayout->gutter();
int tilesH = m_lpLayout->tilesH();
int tilesV = m_lpLayout->tilesV();
QPageSize::Unit unit = m_lpLayout->unit();
qreal rectW = (pageWidth-borderLeft-borderRight-gutter*(tilesH-1)) / tilesH;
qreal rectH = (pageHeight-borderTop-borderBottom-gutter*(tilesV-1)) / tilesV;
bool portrait = true;
if(rectW > rectH)
portrait = false;
printer->setPageSize(pageSize);
printer->setPageMargins(pageMargins, static_cast<QPageLayout::Unit>(unit));
int imageNr = 0;
printer->newPage();
QPixmap pixmap = QPixmap::fromImage(image);
QPainter painter(printer);
QRect rect = painter.viewport();
QSize size = pixmap.size();
for(int x = 0;x < tilesH;x++)
{
for(int y = 0;y < tilesV;y++)
{
cFileViewer* lpFileViewer = static_cast<cFileViewer*>(m_lpSelectedList->indexWidget(m_lpSelectedListModel->index(imageNr, 0)));
if(!lpFileViewer)
return;
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);
QString fileName = lpFileViewer->fileName();
cImage image(fileName);
if(image.isNull())
return;
QPixmap pixmap;
if((image.width() < image.height() && !portrait) ||
(image.width() > image.height() && portrait))
{
QPoint center = image.rect().center();
QMatrix matrix;
matrix.translate(center.x(), center.y());
matrix.rotate(90);
pixmap = QPixmap::fromImage(image.transformed(matrix));
}
else
pixmap = QPixmap::fromImage(image);
QPainter painter(printer);
// QRect rectViewport = painter.viewport();
QRect rect = QRect(0, 0, static_cast<int>(rectW), static_cast<int>(rectH));
QSize size = pixmap.size();
int t = static_cast<int>(borderTop+static_cast<qreal>(y)*(rectH+gutter));
int l = static_cast<int>(borderLeft+static_cast<qreal>(x)*(rectW+gutter));
size.scale(rect.size(), Qt::KeepAspectRatio);
// painter.setViewport(rect.x(), rect.y(), size.width(), size.height());
painter.setViewport(l, t, size.width(), size.height());
painter.setWindow(pixmap.rect());
// painter.drawPixmap(0, 0, pixmap);
painter.drawPixmap(l, t, pixmap);
}
}
}
void cPrint::onPrint()