На этом шаге рассмотрим вывод на печать в Qt.
В большинстве случаев приложения должны предоставлять пользователю возможность вывода на печать. Это обстоятельство может испугать многих разработчиков, и причиной тому является ряд проблем: различные возможности принтеров, разница в отображении шрифтов на экране и принтере, платформозависимые различия в программировании принтеров и т. д. Qt берет на себя решение большинства задач, существенно облегчая задачу разработчиков.
Класс QPrinter является основным для вывода на печать. Благодаря тому, что класс унаследован от QPaintDevice, вывод на печать аналогичен выводу на экран. Для вывода на принтер могут применяться те же методы класса QPainter, что и для всех остальных контекстов рисования.
Класс принтера QPrinter обладает большим числом настроек, чем все остальные классы, унаследованные от класса QPaintDevice. Можно, например, установить размер листа, количество копий и т. д. Qt предоставляет диалоговое окно печати, в котором пользователь сам выполняет необходимые настройки. Это окно реализовано в классе QPrintDialog Эти настройки можно проводить и программно:
Вместо печати на принтер можно перенаправить вывод в файл. Для этого необходимо передать полное имя файла методу setOutputFileName(). Если в метод передать пустую строку, то перенаправление вывода в файл будет проигнорировано, и вывод будет осуществлен на печатающее устройство. Имя печатаемого файла можно установить методом setDocName(); отметим, что это не имя файла, в который перенаправлена печать, а имя задания на печать.
Кроме перенаправления печати в файл, который содержит команды принтера, можно генерировать файлы в формате PDF (Portable Document Format, платформонезависимый формат электронных документов), и это так же просто, как и вывод на печать: нужно передать в метод setOutputFormat() значение QPrinter::PdfFormat.
Класс QPrinter содержит метод setFontEmdeddingEnabled() для внедрения шрифтов в документ-носитель, для того чтобы быть уверенным, что полученный файл содержит все необходимые шрифты. Это полезно в том случае, если вы хотите использовать файлы не только на той платформе, на которой они были созданы.
Чтобы отменить операцию печати, нужно вызвать метод abort(), который вернет значение булевого типа, сигнализирующее о результате выполнения операции отмены.
На следующем шаге рассмотрим пример приложения, осуществляющего печать страницы.