09 int lastPage = printer.toPage - 1;
10 if (lastPage == -1 || lastPage >= pages.size)
11 lastPage = pages.size - 1;
12 int numPages = lastPage - firstPage + 1;
13 for (int i = 0; i < printer.numCopies; ++i) {
14 for (int j = 0; j < numPages; ++j) {
15 if (i != 0 || j != 0)
16 printer.newPage;
17 int index;
18 if (printer.pageOrder == QPrinter::FirstPageFirst) {
19 index = firstPage + j;
20 } else {
21 index = lastPage - j;
22 }
23 printPage(painter, pages[index], index + 1);
24 }
25 }
26 }
Функция
Мы начинаем с определения диапазона печати. Функции
Затем мы печатаем каждую страницу. Внешний цикл
Внутренний цикл
01 void PrintWindow::printPage(QPainter *painter,
02 const QStringList &entries, int pageNumber)
03 {
04 painter->save;
05 painter->translate(0, LargeGap);
06 foreach (QString entry, entries) {
07 QStringList fields = entry.split(": ");
08 QString title = fields[0];
09 QString body = fields[1];
10 printBox(painter, title, titleFont, Qt::lightGray);
11 printBox(painter, body, bodyFont, Qt::white);
12 painter->translate(0, MediumGap);
13 }
14 painter->restore;
15 painter->setFont(footerFont);
16 painter->drawText(painter->window,
17 Qt::AlignHCenter | Qt::AlignBottom,
18 QString::number(pageNumber));
19 }
Функция
01 void PrintWindow::printBox(QPainter *painter, const QString &str,
02 const QFont &font, const QBrush &brush)
03 {