17 if (!currentPage.empty())
18 pages->append(currentPage);
19 }
Функция
Мы выполняем цикл по элементам и добавляем их в конец текущей страницы до тех пор, пока не окажется, что элемент не вмещается на страницу; затем мы добавляем текущую страницу в конец списка
01 int PrintWindow::entryHeight(QPainter *painter, const QString &entry)
02 {
03 int textWidth = painter->window().width() - 2 * SmallGap;
04 QString title = fields[0];
05 QString body = fields[1];
06 QStringList fields = entry.split(": ");
07 int maxHeight = painter->window().height();
08 painter->setFont(titleFont);
09 QRect titleRect = painter->boundingRect(0, 0, textWidth, maxHeight,
10 Qt::TextWordWrap, title);
11 painter->setFont(bodyFont);
12 QRect bodyRect = painter->boundingRect(0, 0, textWidth, maxHeight,
13 Qt::TextWordWrap, body);
14 return titleRect.height() + bodyRect.height() + 4 * SmallGap;
15 }
Функция
01 void PrintWindow::printPages(QPainter *painter,
02 const QList
03 {
04 int firstPage = printer.fromPage() - 1;
05 if (firstPage >= pages.size())
06 return;
07 if (firstPage == -1)
08 firstPage = 0;
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 }
Функция