printer.
setOrientation(QPrinter::Landscape);
if (dlg.
exec() == QDialog::Accepted) {
// calculate the total width/height table would need without scaling
const int rows = newTableWidget ->model()->rowCount();
const int cols = newTableWidget ->model()->columnCount();
double totalWidth = 0.0;
for (int c = 0; c < cols; ++c)
{
totalWidth += newTableWidget ->columnWidth(c);
}
double totalHeight = 0.0;
for (int r = 0; r < rows; ++r)
{
totalHeight += newTableWidget ->rowHeight(r);
}
double totalHeight1;
int num_page = 1;
while (totalHeight > 900)
{
totalHeight1 = 900;
// redirect table's painting on a pixmap
QPixmap pixmap
(totalWidth, newTableWidget
->horizontalHeader
()->height
());
QPixmap pixmap1
(totalWidth, totalHeight1
);
QPaintEvent event
(QRect(0,
0, totalWidth, newTableWidget
->horizontalHeader
()->height
()));
QPainter::setRedirected(newTableWidget
->horizontalHeader
()->viewport
(),
&pixmap
);
QApplication::sendEvent(newTableWidget
->horizontalHeader
()->viewport
(),
&event
);
QPainter::restoreRedirected(newTableWidget
->horizontalHeader
()->viewport
());
QPainter::setRedirected(newTableWidget
->viewport
(),
&pixmap1
);
QApplication::sendEvent(newTableWidget
->viewport
(),
&event1
);
QPainter::restoreRedirected(newTableWidget
->viewport
());
// print scaled pixmap
QString dataDiOggiStringa
= dataDiOggi.
toString("dd.MM.yyyy hh:mm:ss");
painter.drawText(0, 250, tr("Qt 4.3.3 - Date: %1 -") .arg(dataDiOggiStringa));
painter.drawText(0, 150, tr("Page %1") .arg(num_page));
painter.scale(4.5,4.5);
painter.drawPixmap(0, 100, totalWidth, newTableWidget->horizontalHeader()->height(), pixmap);
painter.drawPixmap(0, 100+newTableWidget->horizontalHeader()->height(), totalWidth, totalHeight1, pixmap1);
totalHeight = totalHeight - totalHeight1;
printer.newPage();
numero_pagina = numero_pagina + 1;
}
QPixmap pixmap
(totalWidth, newTableWidget
->horizontalHeader
()->height
());
QPixmap pixmap1
(totalWidth, totalHeight
);
QPaintEvent event
(QRect(0,
0, totalWidth, newTableWidget
->horizontalHeader
()->height
()));
QPainter::setRedirected(newTableWidget
->horizontalHeader
()->viewport
(),
&pixmap
);
QApplication::sendEvent(newTableWidget
->horizontalHeader
()->viewport
(),
&event
);
QPainter::restoreRedirected(newTableWidget
->horizontalHeader
()->viewport
());
QPainter::setRedirected(newTableWidget
->viewport
(),
&pixmap1
);
QApplication::sendEvent(newTableWidget
->viewport
(),
&event1
);
QPainter::restoreRedirected(newTableWidget
->viewport
());
// print scaled pixmap
QString dataDiOggiStringa
= dataDiOggi.
toString("dd.MM.yyyy hh:mm:ss");
painter.drawText(0, 250, tr("Qt 4.3.3 - Date: %1 - ") .arg(dataDiOggiStringa));
painter.drawText(0, 150, tr("Page %1") .arg(num_page));
painter.scale(4.5,4.5);
painter.drawPixmap(0, 100, totalWidth, newTableWidget->horizontalHeader()->height(), pixmap);
painter.drawPixmap(0, 100+newTableWidget->horizontalHeader()->height(), totalWidth, totalHeight, pixmap1);
}
QPrinter printer(QPrinter::HighResolution);
printer.setOrientation(QPrinter::Landscape);
QTableWidget *newTableWidget = tableWidget;
QPrintDialog dlg(&printer, this);
if (dlg.exec() == QDialog::Accepted)
{
// calculate the total width/height table would need without scaling
const int rows = newTableWidget ->model()->rowCount();
const int cols = newTableWidget ->model()->columnCount();
double totalWidth = 0.0;
for (int c = 0; c < cols; ++c)
{
totalWidth += newTableWidget ->columnWidth(c);
}
double totalHeight = 0.0;
for (int r = 0; r < rows; ++r)
{
totalHeight += newTableWidget ->rowHeight(r);
}
double totalHeight1;
int num_page = 1;
while (totalHeight > 900)
{
totalHeight1 = 900;
// redirect table's painting on a pixmap
QPixmap pixmap(totalWidth, newTableWidget->horizontalHeader()->height());
QPixmap pixmap1(totalWidth, totalHeight1);
QPaintEvent event(QRect(0, 0, totalWidth, newTableWidget->horizontalHeader()->height()));
QPaintEvent event1(QRect(0, 0, totalWidth, totalHeight1));
QPainter::setRedirected(newTableWidget->horizontalHeader()->viewport(), &pixmap);
QApplication::sendEvent(newTableWidget->horizontalHeader()->viewport(), &event);
QPainter::restoreRedirected(newTableWidget->horizontalHeader()->viewport());
QPainter::setRedirected(newTableWidget->viewport(), &pixmap1);
QApplication::sendEvent(newTableWidget->viewport(), &event1);
QPainter::restoreRedirected(newTableWidget->viewport());
// print scaled pixmap
QPainter painter(&printer);
QDateTime dataDiOggi = QDateTime::currentDateTime();
QString dataDiOggiStringa = dataDiOggi.toString("dd.MM.yyyy hh:mm:ss");
painter.drawText(0, 250, tr("Qt 4.3.3 - Date: %1 -") .arg(dataDiOggiStringa));
painter.drawText(0, 150, tr("Page %1") .arg(num_page));
painter.scale(4.5,4.5);
painter.drawPixmap(0, 100, totalWidth, newTableWidget->horizontalHeader()->height(), pixmap);
painter.drawPixmap(0, 100+newTableWidget->horizontalHeader()->height(), totalWidth, totalHeight1, pixmap1);
totalHeight = totalHeight - totalHeight1;
printer.newPage();
numero_pagina = numero_pagina + 1;
}
QPixmap pixmap(totalWidth, newTableWidget->horizontalHeader()->height());
QPixmap pixmap1(totalWidth, totalHeight);
QPaintEvent event(QRect(0, 0, totalWidth, newTableWidget->horizontalHeader()->height()));
QPaintEvent event1(QRect(0, 0, totalWidth, totalHeight));
QPainter::setRedirected(newTableWidget->horizontalHeader()->viewport(), &pixmap);
QApplication::sendEvent(newTableWidget->horizontalHeader()->viewport(), &event);
QPainter::restoreRedirected(newTableWidget->horizontalHeader()->viewport());
QPainter::setRedirected(newTableWidget->viewport(), &pixmap1);
QApplication::sendEvent(newTableWidget->viewport(), &event1);
QPainter::restoreRedirected(newTableWidget->viewport());
// print scaled pixmap
QPainter painter(&printer);
QDateTime dataDiOggi = QDateTime::currentDateTime();
QString dataDiOggiStringa = dataDiOggi.toString("dd.MM.yyyy hh:mm:ss");
painter.drawText(0, 250, tr("Qt 4.3.3 - Date: %1 - ") .arg(dataDiOggiStringa));
painter.drawText(0, 150, tr("Page %1") .arg(num_page));
painter.scale(4.5,4.5);
painter.drawPixmap(0, 100, totalWidth, newTableWidget->horizontalHeader()->height(), pixmap);
painter.drawPixmap(0, 100+newTableWidget->horizontalHeader()->height(), totalWidth, totalHeight, pixmap1);
}
To copy to clipboard, switch view to plain text mode
Bookmarks