Qt Print Support
Le module Qt Print Support offre un support multiplateforme étendu pour l'impression. En utilisant les systèmes d'impression de chaque plateforme, les applications Qt Network peuvent imprimer sur des imprimantes connectées et sur des réseaux vers des imprimantes distantes. Le système d'impression prend également en charge la génération de fichiers PDF, ce qui permet de créer des rapports de base.
Qt Print Support n'est pas disponible sur :
- Android™
- iOS
Classes supportant l'impression
Les classes suivantes prennent en charge la sélection et la configuration des imprimantes et l'impression des sorties.
Implémentation de base pour les boîtes de dialogue d'impression utilisées pour configurer les imprimantes | |
Représente une collection de plages de pages | |
Boîte de dialogue de configuration des options de page d'une imprimante | |
Boîte de dialogue permettant de spécifier la configuration de l'imprimante | |
Définit une interface permettant à QPrinter d'interagir avec un sous-système d'impression donné. | |
Boîte de dialogue permettant de prévisualiser et de configurer les mises en page pour la sortie de l'imprimante | |
Widget pour prévisualiser les mises en page de l'imprimante | |
Dispositif de peinture qui peint sur une imprimante | |
Permet d'accéder à des informations sur les imprimantes existantes |
Dispositifs de peinture et impression
Les imprimantes sont représentées par QPrinter, un dispositif de peinture qui offre des fonctionnalités spécifiques à l'impression, telles que la prise en charge de pages multiples et d'une sortie recto-verso. Par conséquent, l'impression implique l'utilisation d'un site QPainter pour peindre sur une série de pages de la même manière que vous peindriez sur un widget ou une image personnalisée.
Création d'une imprimante QPrinter
Bien que les objets QPrinter puissent être construits et configurés sans intervention de l'utilisateur, l'impression est souvent réalisée à la demande de l'utilisateur, par exemple lorsque ce dernier sélectionne l'élément de menu File|Print... dans une application GUI. Dans ce cas, un objet QPrinter nouvellement construit est fourni à un QPrintDialog, permettant à l'utilisateur de spécifier l'imprimante à utiliser, la taille du papier et d'autres propriétés d'impression.
QPrinter printer; QPrintDialog dialog(&printer, this); dialog.setWindowTitle(tr("Print Document")); if (editor->textCursor().hasSelection()) dialog.addEnabledOption(QAbstractPrintDialog::PrintSelection); if (dialog.exec() != QDialog::Accepted) return;
Il est également possible de définir certaines propriétés par défaut en modifiant l'objet QPrinter avant qu'il ne soit fourni à la boîte de dialogue d'impression. Par exemple, les applications qui génèrent des lots de rapports à imprimer peuvent configurer l'adresse QPrinter pour qu'elle soit envoyée par défaut à write to a local file plutôt qu'à une imprimante.
Peindre sur une page
Une fois qu'un objet QPrinter a été construit et configuré, un objet QPainter peut être utilisé pour effectuer des opérations de peinture sur cet objet. Nous pouvons construire et configurer un peintre de la manière suivante :
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. if (page != lastPage) printer.newPage(); } painter.end();
Étant donné que l'objet QPrinter commence par une page blanche, il suffit d'appeler la fonction newPage() après avoir dessiné chaque page, à l'exception de la dernière.
Le document est envoyé à l'imprimante ou écrit dans un fichier local lorsque nous appelons end().
Systèmes de coordonnées
QPrinter fournit des fonctions qui peuvent être utilisées pour obtenir des informations sur les dimensions du papier (le rectangle du papier) et les dimensions de la zone imprimable (le rectangle de la page). Ces informations sont données en coordonnées logiques du périphérique, qui peuvent différer des coordonnées physiques utilisées par le périphérique lui-même, ce qui indique que l'imprimante est capable de restituer le texte et les graphiques à une résolution (généralement plus élevée) que celle de l'écran de l'utilisateur.
Bien que nous n'ayons pas besoin de gérer nous-mêmes la conversion entre les coordonnées logiques et physiques, nous devons tout de même appliquer des transformations aux opérations de peinture, car les mesures en pixels utilisées pour dessiner à l'écran sont souvent trop petites pour les résolutions plus élevées des imprimantes habituelles.
| Systèmes de coordonnées de l'imprimante et du peintre Les fonctions paperRect() et pageRect() fournissent des informations sur la taille du papier utilisé pour l'impression et la zone sur laquelle il est possible de peindre. Le rectangle renvoyé par pageRect() se trouve généralement à l'intérieur du rectangle renvoyé par paperRect(). Il n'est pas nécessaire de tenir compte de la position et de la taille de ces zones lorsque vous utilisez un site QPainter avec un site QPrinter comme dispositif de peinture sous-jacent ; l'origine du système de coordonnées du peintre coïncidera avec le coin supérieur gauche du rectangle de la page et les opérations de peinture seront limitées aux limites de la partie de la page pouvant être dessinée. | ![]() |
Le système de peinture utilise automatiquement les métriques de périphérique correctes pour peindre le texte, mais si vous devez positionner le texte en utilisant les informations obtenues à partir des métriques de police, vous devez vous assurer que le périphérique d'impression est spécifié lorsque vous construisez les objets QFontMetrics et QFontMetricsF, ou vous assurer que chaque QFont utilisé est construit en utilisant la forme du constructeur qui accepte un argument QPaintDevice.
Impression de widgets
Pour imprimer un widget, vous pouvez utiliser la fonction QWidget::render(). Comme nous l'avons mentionné, la résolution de l'imprimante est généralement supérieure à la résolution de l'écran, de sorte que vous devrez mettre le peintre à l'échelle. Il se peut également que vous souhaitiez positionner le widget sur la page. L'exemple de code suivant montre à quoi cela peut ressembler.
QPainter painter; painter.begin(&printer); const auto pageLayout = printer.pageLayout(); const auto pageRect = pageLayout.paintRectPixels(printer.resolution()); const auto paperRect = pageLayout.fullRectPixels(printer.resolution()); double xscale = pageRect.width() / double(myWidget->width()); double yscale = pageRect.height() / double(myWidget->height()); double scale = qMin(xscale, yscale); painter.translate(pageRect.x() + paperRect.width() / 2., pageRect.y() + paperRect.height() / 2.); painter.scale(scale, scale); painter.translate(-myWidget->width() / 2., -myWidget->height() / 2.); myWidget->render(&painter);
Il centre le widget sur la page et le met à l'échelle pour qu'il s'adapte à la page.
Impression à partir de widgets complexes
Certains widgets, tels que QTextEdit et QGraphicsView, affichent un contenu riche qui est généralement géré par des instances d'autres classes, telles que QTextDocument et QGraphicsScene. Par conséquent, ce sont ces classes de gestion de contenu qui fournissent généralement la fonctionnalité d'impression, soit par le biais d'une fonction qui peut être utilisée pour effectuer la tâche complète, soit par le biais d'une fonction qui accepte un objet QPainter existant. Certains widgets fournissent des fonctions de commodité pour exposer les fonctionnalités d'impression sous-jacentes, ce qui évite d'avoir à obtenir le gestionnaire de contenu pour appeler une seule fonction.
Le tableau suivant montre quelle classe et quelle fonction sont responsables de l'impression à partir d'une sélection de différents widgets. Pour les widgets qui n'exposent pas directement la fonctionnalité d'impression, les classes de gestion de contenu contenant cette fonctionnalité peuvent être obtenues via une fonction de l'API du widget correspondant.
| Widget | Fonction d'impression | Accepte |
|---|---|---|
| QGraphicsView | QGraphicsView::render() | QPainter |
| QSvgWidget | QSvgRenderer::render() | QPainter |
| QTextEdit | QTextDocument::print() | QPrinter |
| QTextLayout | QTextLayout::draw() | QPainter |
| QTextLine | QTextLine::draw() | QPainter |
QTextEdit nécessite un QPrinter plutôt qu'un QPainter parce qu'il utilise des informations sur les dimensions de page configurées afin d'insérer des sauts de page aux endroits les plus appropriés dans les documents imprimés.
Utilisation du module
L'utilisation d'un module Qt nécessite l'établissement d'un lien avec la bibliothèque du module, soit directement, soit par l'intermédiaire d'autres dépendances. Plusieurs outils de construction disposent d'un support dédié à cet effet, notamment CMake et qmake.
Construction avec CMake
Utilisez la commande find_package() pour localiser les composants du module nécessaires dans le paquet Qt6:
find_package(Qt6 REQUIRED COMPONENTS PrintSupport) target_link_libraries(mytarget PRIVATE Qt6::PrintSupport)
Voir aussi l'aperçu de la construction avec CMake.
Construction avec qmake
Pour configurer le module afin qu'il soit construit avec qmake, ajoutez le module comme valeur de la variable QT dans le fichier .pro du projet :
QT += printsupport
Évolution du module
Changes to Qt Print Support liste les changements importants dans l'API et les fonctionnalités du module qui ont été effectués pour la série Qt 6 de Qt.
Licences et marques déposées
Le module Qt Print Support est disponible sous licence commerciale auprès de The Qt Company. En outre, il est disponible sous des licences de logiciel libre : La licence GNU Lesser General Public License, version 3, ou la licence GNU General Public License, version 2. Voir Qt Licensing pour plus de détails.
Veuillez noter qu'Adobe® impose des restrictions sur l'utilisation de ses marques (y compris les logos) en relation avec le format PDF, par exemple "Adobe PDF". Veuillez vous référer à www.adobe.com pour les directives.
© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.
