QTextLayout Class
La classe QTextLayout est utilisée pour la mise en page et le rendu du texte. Plus d'informations...
| En-tête : | #include <QTextLayout> |
| CMake : | find_package(Qt6 REQUIRED COMPONENTS Gui)target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake : | QT += gui |
- Liste de tous les membres, y compris les membres hérités
- QTextLayout fait partie de Rich Text Processing APIs.
Remarque : toutes les fonctions de cette classe sont réentrantes.
Types publics
| struct | FormatRange |
| enum | CursorMode { SkipCharacters, SkipWords } |
(since 6.5) enum | GlyphRunRetrievalFlag { RetrieveGlyphIndexes, RetrieveGlyphPositions, RetrieveStringIndexes, RetrieveString, RetrieveAll } |
| flags | GlyphRunRetrievalFlags |
Fonctions publiques
| QTextLayout() | |
| QTextLayout(const QString &text) | |
| QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr) | |
| ~QTextLayout() | |
| void | beginLayout() |
| QRectF | boundingRect() const |
| bool | cacheEnabled() const |
| void | clearFormats() |
| void | clearLayout() |
| QTextLine | createLine() |
| Qt::CursorMoveStyle | cursorMoveStyle() const |
| void | draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const |
| void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const |
| void | drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const |
| void | endLayout() |
| QFont | font() const |
| QList<QTextLayout::FormatRange> | formats() const |
| QList<QGlyphRun> | glyphRuns(int from = -1, int length = -1) const |
(since 6.5) QList<QGlyphRun> | glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const |
| bool | isValidCursorPosition(int pos) const |
| int | leftCursorPosition(int oldPos) const |
| QTextLine | lineAt(int i) const |
| int | lineCount() const |
| QTextLine | lineForTextPosition(int pos) const |
| qreal | maximumWidth() const |
| qreal | minimumWidth() const |
| int | nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const |
| QPointF | position() const |
| int | preeditAreaPosition() const |
| QString | preeditAreaText() const |
| int | previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const |
| int | rightCursorPosition(int oldPos) const |
| void | setCacheEnabled(bool enable) |
| void | setCursorMoveStyle(Qt::CursorMoveStyle style) |
| void | setFont(const QFont &font) |
| void | setFormats(const QList<QTextLayout::FormatRange> &formats) |
| void | setPosition(const QPointF &p) |
| void | setPreeditArea(int position, const QString &text) |
| void | setText(const QString &string) |
| void | setTextOption(const QTextOption &option) |
| QString | text() const |
| const QTextOption & | textOption() const |
Description détaillée
Cette classe offre de nombreuses fonctionnalités attendues d'un moteur de mise en page de texte moderne, notamment le rendu conforme à Unicode, le saut de ligne et la gestion du positionnement du curseur. Elle peut également produire et rendre une mise en page indépendante du périphérique, ce qui est important pour les applications WYSIWYG.
La classe possède une API de bas niveau et, à moins que vous n'ayez l'intention d'implémenter votre propre rendu de texte pour un widget spécialisé, vous n'aurez probablement pas besoin de l'utiliser directement.
QTextLayout peut être utilisé avec du texte simple et du texte enrichi.
QTextLayout peut être utilisé pour créer une séquence d'instances QTextLine avec des largeurs données et peut les positionner indépendamment sur l'écran. Une fois la mise en page effectuée, ces lignes peuvent être dessinées à l'aide d'un dispositif de peinture.
Le texte à disposer peut être fourni dans le constructeur ou défini à l'aide de setText().
La mise en page peut être considérée comme une séquence d'objets QTextLine; utilisez createLine() pour créer une instance QTextLine, et lineAt() ou lineForTextPosition() pour récupérer les lignes créées.
Voici un extrait de code qui illustre la phase de mise en page :
int leading = fontMetrics.leading(); qreal height = 0; textLayout.setCacheEnabled(true); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(lineWidth); height += leading; line.setPosition(QPointF(0, height)); height += line.height(); } textLayout.endLayout();
Le texte peut ensuite être rendu en appelant la fonction draw() de la mise en page :
Il est également possible de dessiner chaque ligne individuellement, par exemple pour dessiner la dernière ligne qui tient dans un widget élidé :
QPainter painter(this); QFontMetrics fontMetrics = painter.fontMetrics(); int lineSpacing = fontMetrics.lineSpacing(); int y = 0; QTextLayout textLayout(content, painter.font()); textLayout.beginLayout(); while (true) { QTextLine line = textLayout.createLine(); if (!line.isValid()) break; line.setLineWidth(width()); const int nextLineY = y + lineSpacing; if (height() >= nextLineY + lineSpacing) { line.draw(&painter, QPoint(0, y)); y = nextLineY; } else { const QString lastLine = content.mid(line.textStart()); const QString elidedLastLine = fontMetrics.elidedText(lastLine, Qt::ElideRight, width()); painter.drawText(QPoint(0, y + fontMetrics.ascent()), elidedLastLine); line = textLayout.createLine(); break; } } textLayout.endLayout();
Pour une position donnée dans le texte, vous pouvez trouver une position valide du curseur avec isValidCursorPosition(), nextCursorPosition() et previousCursorPosition().
Le QTextLayout lui-même peut être positionné avec setPosition() ; il possède un boundingRect(), un minimumWidth() et un maximumWidth().
Voir également QStaticText.
Documentation sur les types de membres
enum QTextLayout::CursorMode
| Constante | Valeur |
|---|---|
QTextLayout::SkipCharacters | 0 |
QTextLayout::SkipWords | 1 |
[since 6.5] enum QTextLayout::GlyphRunRetrievalFlag
flags QTextLayout::GlyphRunRetrievalFlags
GlyphRunRetrievalFlag spécifie les drapeaux transmis aux fonctions glyphRuns() pour déterminer quelles propriétés de la disposition sont renvoyées dans les objets QGlyphRun. Étant donné que chaque propriété consomme de la mémoire et peut nécessiter des allocations supplémentaires, il est conseillé de ne demander que les propriétés auxquelles vous aurez besoin d'accéder ultérieurement.
| Constante | Valeur | Description |
|---|---|---|
QTextLayout::RetrieveGlyphIndexes | 0x1 | Récupère les index dans la police qui correspondent aux glyphes. |
QTextLayout::RetrieveGlyphPositions | 0x2 | Récupère les positions relatives des glyphes dans la disposition. |
QTextLayout::RetrieveStringIndexes | 0x4 | Récupère les index de la chaîne originale correspondant à chacun des glyphes. |
QTextLayout::RetrieveString | 0x8 | Récupère la chaîne source originale dans la disposition. |
QTextLayout::RetrieveAll | 0xffff | Récupère toutes les propriétés disponibles de la disposition. |
Cette énumération a été introduite dans Qt 6.5.
Le type GlyphRunRetrievalFlags est un typedef pour QFlags<GlyphRunRetrievalFlag>. Il stocke une combinaison OU de valeurs GlyphRunRetrievalFlag.
Voir également glyphRuns() et QTextLine::glyphRuns().
Documentation des fonctions membres
QTextLayout::QTextLayout()
Construit une mise en page de texte vide.
Voir aussi setText().
QTextLayout::QTextLayout(const QString &text)
Construit une présentation de texte pour mettre en page le texte donné text.
QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr)
Construit une mise en page de texte pour mettre en page le texte donné text avec le texte spécifié font.
Tous les calculs de métrique et de mise en page seront effectués en fonction du dispositif de peinture, paintdevice. Si paintdevice est nullptr, les calculs seront effectués en termes de métriques d'écran.
[noexcept] QTextLayout::~QTextLayout()
Détruit la mise en page.
void QTextLayout::beginLayout()
Commence le processus de mise en page.
Attention : Cette opération invalide la mise en page, de sorte que tous les objets QTextLine existants qui font référence au contenu précédent doivent être supprimés.
Voir aussi endLayout().
QRectF QTextLayout::boundingRect() const
Le plus petit rectangle qui contient toutes les lignes de la mise en page.
bool QTextLayout::cacheEnabled() const
Renvoie true si les informations complètes sur la mise en page sont mises en cache ; sinon, renvoie false.
Voir aussi setCacheEnabled().
void QTextLayout::clearFormats()
Efface la liste des formats supplémentaires pris en charge par la mise en page du texte.
Voir aussi formats() et setFormats().
void QTextLayout::clearLayout()
Efface les informations sur les lignes dans la mise en page. Après avoir appelé cette fonction, lineCount() renvoie 0.
Attention : Cette opération invalide la mise en page, de sorte que tous les objets QTextLine existants qui font référence au contenu précédent doivent être supprimés.
QTextLine QTextLayout::createLine()
Renvoie une nouvelle ligne de texte à mettre en place si du texte doit être inséré dans la mise en page ; sinon, renvoie une ligne de texte non valide.
La mise en page de texte crée un nouvel objet ligne qui commence après la dernière ligne de la mise en page, ou au début si la mise en page est vide. La mise en page conserve un curseur interne et chaque ligne est remplie de texte à partir de la position du curseur lorsque la fonction QTextLine::setLineWidth() est appelée.
Une fois que la fonction QTextLine::setLineWidth() est appelée, une nouvelle ligne peut être créée et remplie de texte. En répétant ce processus, tout le bloc de texte contenu dans la page QTextLayout sera affiché. S'il ne reste plus de texte à insérer dans la mise en page, la page QTextLine renvoyée ne sera pas valide (isValid() renverra false).
Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const
Le style de déplacement du curseur de ce site QTextLayout. La valeur par défaut est Qt::LogicalMoveStyle.
Voir aussi setCursorMoveStyle().
void QTextLayout::draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const
Dessine l'ensemble de la mise en page sur le peintre p à la position spécifiée par pos. Le rendu de la mise en page comprend les éléments donnés par selections et est découpé à l'intérieur du rectangle spécifié par clip.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const
Dessine un curseur de texte avec le stylo actuel et le width spécifié à l'endroit donné position en utilisant le painter spécifié. La position correspondante dans le texte est spécifiée par cursorPosition.
void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const
Dessine un curseur de texte avec le stylo actuel à l'endroit donné position en utilisant le painter spécifié. La position correspondante dans le texte est spécifiée par cursorPosition.
Il s'agit d'une fonction surchargée.
void QTextLayout::endLayout()
Termine le processus de mise en page.
Voir aussi beginLayout().
QFont QTextLayout::font() const
Renvoie la police actuellement utilisée pour la mise en page, ou une police par défaut si aucune n'est définie.
Voir aussi setFont().
QList<QTextLayout::FormatRange> QTextLayout::formats() const
Renvoie la liste des formats supplémentaires pris en charge par la mise en page du texte.
Voir aussi setFormats() et clearFormats().
QList<QGlyphRun> QTextLayout::glyphRuns(int from = -1, int length = -1) const
Renvoie les index et les positions de tous les glyphes correspondant aux caractères length commençant à la position from dans ce QTextLayout. Il s'agit d'une fonction coûteuse, qui ne doit pas être appelée dans un contexte sensible au temps.
Si from est inférieur à zéro, le parcours des glyphes commencera au premier caractère de la disposition. Si length est inférieur à zéro, il couvrira toute la chaîne de caractères à partir de la position de départ.
Note : Ceci est équivalent à appeler glyphRuns(from, length, QTextLayout::GlyphRunRetrievalFlag::GlyphIndexes | QTextLayout::GlyphRunRetrievalFlag::GlyphPositions).
Il s'agit d'une fonction surchargée.
Voir aussi draw() et QPainter::drawGlyphRun().
[since 6.5] QList<QGlyphRun> QTextLayout::glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const
Renvoie les index et les positions de tous les glyphes correspondant aux caractères length commençant à la position from dans ce QTextLayout. Il s'agit d'une fonction coûteuse, qui ne doit pas être appelée dans un contexte sensible au temps.
Si from est inférieur à zéro, le parcours des glyphes commencera au premier caractère de la disposition. Si length est inférieur à zéro, il couvrira toute la chaîne de caractères à partir de la position de départ.
retrievalFlags spécifie les propriétés de QGlyphRun qui seront extraites de la disposition. Pour minimiser les allocations et la consommation de mémoire, il convient d'inclure uniquement les propriétés auxquelles vous aurez besoin d'accéder ultérieurement.
Il s'agit d'une fonction surchargée.
Cette fonction a été introduite dans Qt 6.5.
Voir aussi draw() et QPainter::drawGlyphRun().
bool QTextLayout::isValidCursorPosition(int pos) const
Renvoie true si la position pos est une position de curseur valide.
Dans un contexte Unicode, certaines positions dans le texte ne sont pas des positions de curseur valides, parce que la position se trouve à l'intérieur d'un substitut Unicode ou d'un groupe de graphèmes.
Un groupe de graphèmes est une séquence de deux ou plusieurs caractères Unicode qui forment une entité indivisible à l'écran. Par exemple, le caractère latin `Ä' peut être représenté en Unicode par deux caractères, `A' (0x41) et le tréma de combinaison (0x308). Un curseur de texte ne peut être placé valablement qu'avant ou après ces deux caractères, jamais entre eux, car cela n'aurait aucun sens. Dans les langues indic, chaque syllabe forme un groupe de graphèmes.
int QTextLayout::leftCursorPosition(int oldPos) const
Renvoie la position du curseur à gauche de oldPos, à côté de lui. Elle dépend de la position visuelle des caractères, après réorganisation bidirectionnelle.
Voir aussi rightCursorPosition() et previousCursorPosition().
QTextLine QTextLayout::lineAt(int i) const
Renvoie la i-ème ligne de texte dans cette mise en page.
Voir aussi lineCount() et lineForTextPosition().
int QTextLayout::lineCount() const
Renvoie le nombre de lignes dans cette présentation de texte.
Voir également lineAt().
QTextLine QTextLayout::lineForTextPosition(int pos) const
Renvoie la ligne qui contient la position du curseur spécifiée par pos.
Voir aussi isValidCursorPosition() et lineAt().
qreal QTextLayout::maximumWidth() const
La largeur maximale à laquelle la mise en page peut s'étendre ; il s'agit essentiellement de la largeur de l'ensemble du texte.
Attention : Cette fonction ne renvoie une valeur valide qu'une fois la mise en page effectuée.
Voir aussi minimumWidth().
qreal QTextLayout::minimumWidth() const
La largeur minimale dont la mise en page a besoin. Il s'agit de la largeur de la plus petite sous-chaîne insécable de la mise en page.
Attention : Cette fonction ne renvoie une valeur valide qu'une fois la mise en page effectuée.
Voir aussi maximumWidth().
int QTextLayout::nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
Renvoie la prochaine position valide du curseur après oldPos qui respecte le curseur donné mode. Renvoie la valeur de oldPos, si oldPos n'est pas une position valide du curseur.
Voir aussi isValidCursorPosition() et previousCursorPosition().
QPointF QTextLayout::position() const
La position globale de la mise en page. Elle est indépendante du rectangle de délimitation et du processus de mise en page.
Voir également setPosition().
int QTextLayout::preeditAreaPosition() const
Renvoie la position de la zone de la mise en page du texte qui sera traitée avant l'édition.
Voir aussi preeditAreaText().
QString QTextLayout::preeditAreaText() const
Renvoie le texte qui est inséré dans la mise en page avant l'édition.
Voir également preeditAreaPosition().
int QTextLayout::previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const
Renvoie la première position valide du curseur avant oldPos qui respecte le curseur donné mode. Renvoie la valeur de oldPos, si oldPos n'est pas une position valide du curseur.
Voir aussi isValidCursorPosition() et nextCursorPosition().
int QTextLayout::rightCursorPosition(int oldPos) const
Renvoie la position du curseur à droite de oldPos, à côté de lui. Elle dépend de la position visuelle des caractères, après réorganisation bidirectionnelle.
Voir aussi leftCursorPosition() et nextCursorPosition().
void QTextLayout::setCacheEnabled(bool enable)
Active la mise en cache de l'ensemble des informations de mise en page si enable est vrai ; sinon, désactive la mise en cache de la mise en page. Habituellement, QTextLayout jette la plupart des informations de mise en page après un appel à endLayout() pour réduire la consommation de mémoire. Toutefois, si vous souhaitez dessiner le texte directement après l'avoir mis en page, l'activation de la mise en cache peut accélérer considérablement le dessin.
Voir aussi cacheEnabled().
void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)
Définit le style de mouvement du curseur visuel en fonction de la valeur donnée style. Si QTextLayout est soutenu par un document, vous pouvez l'ignorer et utiliser l'option dans QTextDocument, cette option est pour les widgets comme QLineEdit ou les widgets personnalisés sans QTextDocument. La valeur par défaut est Qt::LogicalMoveStyle.
Voir aussi cursorMoveStyle().
void QTextLayout::setFont(const QFont &font)
Définit la police de la mise en page à la valeur donnée font. La mise en page est invalidée et doit être redéfinie.
Voir aussi font().
void QTextLayout::setFormats(const QList<QTextLayout::FormatRange> &formats)
Définit les formats supplémentaires pris en charge par la mise en page de texte à formats. Les formats sont appliqués avec le texte de la zone de préédition en place.
Voir également formats() et clearFormats().
void QTextLayout::setPosition(const QPointF &p)
Déplace la mise en page du texte au point p.
Voir aussi position().
void QTextLayout::setPreeditArea(int position, const QString &text)
Définit les adresses position et text de la zone de la mise en page qui est traitée avant l'édition. La mise en page est invalidée et doit être redéfinie.
Voir également preeditAreaPosition() et preeditAreaText().
void QTextLayout::setText(const QString &string)
Fixe le texte de la mise en page à la valeur donnée string. La mise en page est invalidée et doit être redéfinie.
Notez que si vous utilisez cette page QTextLayout dans le cadre d'une page QTextDocument, cette méthode n'aura aucun effet.
Voir aussi text().
void QTextLayout::setTextOption(const QTextOption &option)
Définit la structure d'option de texte qui contrôle le processus de mise en page à l'adresse option.
Voir aussi textOption().
QString QTextLayout::text() const
Renvoie le texte de la mise en page.
Voir également setText().
const QTextOption &QTextLayout::textOption() const
Renvoie l'option de texte courante utilisée pour contrôler le processus de mise en page.
Voir aussi setTextOption().
© 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.