Sie sind auf Seite 1von 2

Qt 4.

6: Printing with Qt 05/10/2013

Home · All Classes · All Functions · Overviews

[Previous: Styling] [The Paint System]

Printing with Qt
Qt provides extensive cross-platform support for printing. Using the printing systems on each platform, Qt applications can print to
attached printers and across networks to remote printers. Qt's printing system also enables PostScript and PDF files to be
generated, providing the foundation for basic report generation facilities.
Classes Supporting Printing
Paint Devices and Printing
Creating a QPrinter
Painting onto a Page
Coordinate Systems
Printing from Complex Widgets
Classes Supporting Printing
The following classes support the selecting and setting up of printers and printing output.
QAbstractPrintDialog Base implementation for print dialogs used to configure printers
QPageSetupDialog Configuration dialog for the page-related options on a printer
QPrintDialog Dialog for specifying the printer's configuration
QPrintEngine Defines an interface for how QPrinter interacts with a given printing subsystem
QPrintPreviewDialog Dialog for previewing and configuring page layouts for printer output
QPrintPreviewWidget Widget for previewing page layouts for printer output
QPrinter Paint device that paints on a printer
QPrinterInfo Gives access to information about existing printers

Paint Devices and Printing


In Qt, printers are represented by QPrinter, a paint device that provides functionality specific to printing, such as support for multiple
pages and double-sided output. As a result, printing involves using a QPainter to paint onto a series of pages in the same way that
you would paint onto a custom widget or image.

Creating a QPrinter

Although QPrinter objects can be constructed and set up without requiring user input, printing is often performed as a result of a
request by the user; for example, when the user selects the File|Print... menu item in a GUI application. In such cases, a newly-
constructed QPrinter object is supplied to a QPrintDialog, allowing the user to specify the printer to use, paper size, and other printing
properties.
QPrinter printer;

QPrintDialog *dialog = new QPrintDialog(&printer, this);


dialog->setWindowTitle(tr("Print Document"));
if (editor->textCursor().hasSelection())
dialog->addEnabledOption(QAbstractPrintDialog::PrintSelection);
if (dialog->exec() != QDialog::Accepted)
return;

It is also possible to set certain default properties by modifying the QPrinter before it is supplied to the print dialog. For example,
applications that generate batches of reports for printing may set up the QPrinter to write to a local file by default rather than to a
printer.

Painting onto a Page

Once a QPrinter object has been constructed and set up, a QPainter can be used to perform painting operations on it. We can
construct and set up a painter in the following way:
QPrinter printer(QPrinter::HighResolution);
printer.setOutputFileName("print.ps");
QPainter painter;
painter.begin(&printer);

for (int page = 0; page < numberOfPages; ++page) {


// Use the painter to draw on the page.

http://www.trinitydesktop.org/docs/qt4/printing.html 1/2
Qt 4.6: Printing with Qt 05/10/2013

if (page != lastPage)
printer.newPage();
}

painter.end();

Since the QPrinter starts with a blank page, we only need to call the newPage() function after drawing each page, except for the last
page.
The document is sent to the printer, or written to a local file, when we call end().

Coordinate Systems

QPrinter provides functions that can be used to obtain information about the dimensions of the paper (the paper rectangle) and the
dimensions of the printable area (the page rectangle). These are given in logical device coordinates that may differ from the physical
coordinates used by the device itself, indicating that the printer is able to render text and graphics at a (typically higher) resolution
than the user's display.
Although we do not need to handle the conversion between logical and physical coordinates ourselves, we still need to apply
transformations to painting operations because the pixel measurements used to draw on screen are often too small for the higher
resolutions of typical printers.
Printer and Painter Coordinate Systems
The paperRect() and pageRect() functions provide information
about the size of the paper used for printing and the area on it
that can be painted on.
The rectangle returned by pageRect() usually lies inside the
rectangle returned by paperRect(). You do not need to take the
positions and sizes of these area into account when using a
QPainter with a QPrinter as the underlying paint device; the
origin of the painter's coordinate system will coincide with the
top-left corner of the page rectangle, and painting operations
will be clipped to the bounds of the drawable part of the page.

The paint system automatically uses the correct device metrics when painting text but, if you need to position text using information
obtained from font metrics, you need to ensure that the print device is specified when you construct QFontMetrics and QFontMetricsF
objects, or ensure that each QFont used is constructed using the form of the constructor that accepts a QPaintDevice argument.
Printing from Complex Widgets
Certain widgets, such as QTextEdit and QGraphicsView, display rich content that is typically managed by instances of other classes,
such as QTextDocument and QGraphicsScene. As a result, it is these content handling classes that usually provide printing
functionality, either via a function that can be used to perform the complete task, or via a function that accepts an existing QPainter
object. Some widgets provide convenience functions to expose underlying printing features, avoiding the need to obtain the content
handler just to call a single function.
The following table shows which class and function are responsible for printing from a selection of different widgets. For widgets that
do not expose printing functionality directly, the content handling classes containing this functionality can be obtained via a function in
the corresponding widget's API.
Widget Printing function Accepts
QGraphicsView QGraphicsView::render() QPainter
QSvgWidget QSvgRenderer::render() QPainter
QTextEdit QTextDocument::print() QPrinter
QTextLayout QTextLayout::draw() QPainter
QTextLine QTextLine::draw() QPainter
QTextEdit requires a QPrinter rather than a QPainter because it uses information about the configured page dimensions in order to
insert page breaks at the most appropriate places in printed documents.
[Previous: Styling] [The Paint System]

Copyright © 2010 Nokia Corporation and/or its Trademarks Qt 4.6.3


subsidiary(-ies)

http://www.trinitydesktop.org/docs/qt4/printing.html 2/2

Das könnte Ihnen auch gefallen