Жасмин Бланшет

Книги → QT 4: программирование GUI на С++ → Вывод на печатающее устройство

• Мы можем преобразовать наши данные в формат HTML и затем воспроизвести их с применением класса QTextDocument, процессора форматированного текста Qt.

• Мы можем выполнить рисование и разбивку на страницы вручную.

Мы рассмотрим по очереди оба подхода. В качестве примера мы распечатаем цветочный справочник: список названий цветов с текстовым описанием. Каждый элемент этого справочника представляется строкой формата «название: описание», например:

Miltonopsis santanae: Самый опасный вид орхидеи.

Поскольку данные каждого цветка представлены одной строкой, мы можем представить цветочный справочник при помощи одного объекта QStringList. Ниже приводится функция печати цветочного справочника, использующая процессор форматированного текста Qt:

01 void PrintWindow::printFlowerGuide(const QStringList &entries)

02 {

03 QString html;

04 foreach(QString entry, entries) {

05 QStringList fields = entry.split(": ");

06 QString title = Qt::escape(fields[0]);

07 QString body = Qt::escape(fields[1]);

08 html = "<table width=\"100%\" border=1 cellspacing=0>\n"

09 "<tr><td bgcolor=\"lightgray\"><font size=\"+1\">"

10 "<b><i>" + title + "</i></b></font>\n<tr><td>" + body"

11 + "\n</table>\n<br>\n";

12 }

13 printHtml(html);

14 }

На первом этапе QStringList преобразуется в формат HTML. Каждый цветок представляется таблицей HTML с двумя ячейками. Мы используем функцию Qt::escape() для замены специальных символов «&», «<», «>» на соответствующие элементы формата HTML(«&amp;», «&lt;», «&gt;»). Затем мы вызываем функцию printHtml() для печати текста.

01 void PrintWindow::printHtml(const QString &html)

02 {

03 QPrintDialog printDialog(&printer, this);

04 if (printDialog.exec()) {

05 QPainter painter(&printer);

06 QTextDocument textDocument;

07 textDocument.setHtml(html);

08 textDocument.print(&printer);

09 }

10 }

Функция printHtml() выводит диалоговое окно QPrintDialog и выполняет печать документа HTML. Она может без изменений повторно использоваться в любом приложении Qt для распечатки страниц произвольного текста в формате HTML.

Рис. 8.13. Вывод на печать цветочного справочника с применением QTextDocument.

Преобразование документа в формат HTML и использование QTextDocument для его распечатки являются самым удобным способом печати отчетов и других сложных документов. В тех случаях, когда требуется обеспечить больший контроль, мы можем вручную выполнить компоновку страниц и их рисование. Давайте теперь посмотрим, как можно напечатать цветочный справочник при помощи класса QPainter. Ниже приводится новая версия функции printFlowerGuide():

01 void PrintWindow::printFlowerGuide(const QStringList &entries)

02 {

03 QPrintDialog printDialog(&printer, this);

04 if (printDialog.exec()) {

05 QPainter painter(&printer);

06 QList<QStringList> pages;

07 paginate(&painter, &pages, entries);

08 printPages(&painter, pages);

09 }

← предыдущая следующая →

Страницы раздела: 1 2 3 4 5

Публикация компанией Dropbox кода Zulip – средства общения для IT-разработчиков

20.11.2015
Одной из одобрительно встреченных программистами инициатив, реализующихся в рамках акции Hack Week, стала публикация исходного кода приложения Zulip – веб-приложения для общения между собой разработчиков в сфере IT-технологий.

Объединение ОС Android и Chrome

17.11.2015
Слухи об объединении двух крупнейших ОС компании Google, Android и Chrome, гуляют по Интернету уже более 5 лет, но до сих пор этого не случилось, хотя очевидно, что с течением времени эти ОС становятся всё более похожими: так, в последнее время появилось немало Android-устройств, к которым прилагаются клавиатуры, а Chrome OS «научилась» работать с сенсорными экранами.

Конференция Linux Piter 2015

15.11.2015
Уже почти через неделю в Санкт-Петербурге впервые в истории пройдёт конференция, посвящённая проблемам свободного программного обеспечения – Linux Piter 2015.