Mise en page des documents
La mise en page d'un document n'a d'importance que lorsqu'il doit être affiché sur un appareil ou lorsque certaines informations sont demandées et nécessitent une représentation visuelle du document. Jusqu'à ce que cela se produise, le document n'a pas besoin d'être formaté et préparé pour un appareil.
Vue d'ensemble
La mise en page de chaque document est gérée par une sous-classe de la classe QAbstractTextDocumentLayout. Cette classe fournit une interface commune pour les moteurs de mise en page et de rendu. Le comportement de rendu par défaut est actuellement implémenté dans une classe privée. Cette approche permet de créer des mises en page personnalisées et fournit le mécanisme utilisé lors de la préparation des pages pour l'impression ou l'exportation vers des fichiers PDF (Portable Document Format).
Exemple - Mise en page de texte en forme
Il est parfois important de pouvoir formater du texte brut dans une région de forme irrégulière, par exemple lors du rendu d'un widget personnalisé. Scribe propose des fonctionnalités génériques, telles que celles fournies par la classe QTextLayout, pour aider les développeurs à effectuer des tâches de mise en forme et d'habillage des mots sans avoir à créer un document au préalable.

La mise en forme et le dessin d'un paragraphe de texte simple sont simples. L'exemple ci-dessous présente un paragraphe de texte, utilisant une seule police, autour du bord droit d'un cercle.
QTextLayout textLayout(text, font); qreal margin = 10; qreal radius = qMin(width()/2.0, height()/2.0) - margin; QFontMetrics fm(font); qreal lineHeight = fm.height(); qreal y = 0; textLayout.beginLayout(); while (1) { // create a new line QTextLine line = textLayout.createLine(); if (!line.isValid()) break; qreal x1 = qMax(0.0, pow(pow(radius,2)-pow(radius-y,2), 0.5)); qreal x2 = qMax(0.0, pow(pow(radius,2)-pow(radius-(y+lineHeight),2), 0.5)); qreal x = qMax(x1, x2) + margin; qreal lineWidth = (width() - margin) - x; line.setLineWidth(lineWidth); line.setPosition(QPointF(x, margin+y)); y += line.height(); } textLayout.endLayout(); QPainter painter; painter.begin(this); painter.setRenderHint(QPainter::Antialiasing); painter.fillRect(rect(), Qt::white); painter.setBrush(QBrush(Qt::black)); painter.setPen(QPen(Qt::black)); textLayout.draw(&painter, QPoint(0,0)); painter.setBrush(QBrush(QColor("#a6ce39"))); painter.setPen(QPen(Qt::black)); painter.drawEllipse(QRectF(-radius, margin, 2*radius, 2*radius)); painter.end();
Nous créons une mise en page de texte, en spécifiant la chaîne de texte que nous voulons afficher et la police à utiliser. Nous nous assurons que le texte fourni est correctement formaté en obtenant des lignes de texte à partir du format de texte et en enveloppant le texte restant dans l'espace disponible. Les lignes sont positionnées au fur et à mesure que l'on se déplace sur la page.
Le texte formaté peut être dessiné sur un périphérique de peinture ; dans le code ci-dessus, le texte est dessiné directement sur un widget.
© 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.