Sur cette page

QTextLayout Class

La classe QTextLayout sert à mettre en page et à afficher du texte. En savoir plus...

En-tête : #include <QTextLayout>
CMake : find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake : QT += gui

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

Elle offre de nombreuses fonctionnalités attendues d’un moteur de mise en page moderne, notamment un rendu compatible Unicode, le saut de ligne et la gestion du positionnement du curseur. Elle permet également de générer et d’afficher une mise en page indépendante du périphérique, ce qui est essentiel pour les applications WYSIWYG.

Cette classe dispose d’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é aussi bien avec du texte brut qu'avec du texte enrichi.

QTextLayout permet de créer une séquence d’instances de ` QTextLine ` avec des largeurs données et de les positionner indépendamment à l’écran. Une fois la mise en page terminée, ces lignes peuvent être dessinées sur un périphérique de dessin.

Le texte à mettre en page peut être fourni dans le constructeur ou défini à l’aide de la méthode 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 illustrant 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 affiché en appelant la fonction ` draw()` de la mise en page :

QPainter painter(this);
textLayout.draw(&painter, QPoint(0, 0));

Il est également possible de dessiner chaque ligne individuellement, par exemple pour tracer 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 de curseur valide à l’aide de isValidCursorPosition(), nextCursorPosition() et previousCursorPosition().

Le QTextLayout lui-même peut être positionné à l'aide de setPosition() ; il dispose d'une méthode boundingRect(), d'une méthode minimumWidth() et d'une méthode maximumWidth().

Voir également QStaticText.

Documentation sur les types de membres

enum QTextLayout::CursorMode

ConstanteValeur
QTextLayout::SkipCharacters0
QTextLayout::SkipWords1

[since 6.5] enum QTextLayout::GlyphRunRetrievalFlag
flags QTextLayout::GlyphRunRetrievalFlags

GlyphRunRetrievalFlag spécifie les indicateurs transmis aux fonctions ` glyphRuns()` afin de déterminer quelles propriétés de la mise en page 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 recommandé de ne demander que les propriétés auxquelles vous aurez besoin d’accéder ultérieurement.

ConstanteValeurDescription
QTextLayout::RetrieveGlyphIndexes0x1Récupère les index de la police correspondant aux glyphes.
QTextLayout::RetrieveGlyphPositions0x2Récupère les positions relatives des glyphes dans la mise en page.
QTextLayout::RetrieveStringIndexes0x4Récupère les index de la chaîne d'origine qui correspondent à chacun des glyphes.
QTextLayout::RetrieveString0x8Récupère la chaîne source d'origine à partir de la mise en page.
QTextLayout::RetrieveAll0xffffRécupère toutes les propriétés disponibles de la mise en page.

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()

Crée une mise en page de texte vide.

Voir aussi setText().

QTextLayout::QTextLayout(const QString &text)

Crée une mise en page de texte pour afficher l'text ion fournie.

QTextLayout::QTextLayout(const QString &text, const QFont &font, const QPaintDevice *paintdevice = nullptr)

Crée une mise en page de texte pour afficher l'text fournie avec l'font spécifiée.

Tous les calculs métriques et de mise en page seront effectués en fonction du périphérique de rendu, paintdevice. Si paintdevice est défini sur nullptr, les calculs seront effectués en métriques d'écran.

[noexcept] QTextLayout::~QTextLayout()

Supprime la mise en page.

void QTextLayout::beginLayout()

Lance le processus de mise en page.

Avertissement : cette opération invalidera la mise en page ; tous les objets ` QTextLine ` existants qui font référence au contenu précédent doivent donc ê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 de 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 également formats() et setFormats().

void QTextLayout::clearLayout()

Efface les informations de ligne dans la mise en page. Une fois cette fonction appelée, la méthode lineCount() renvoie 0.

Avertissement : cette opération invalide la mise en page ; tous les objets ` QTextLine ` existants qui font référence au contenu précédent doivent donc être supprimés.

QTextLine QTextLayout::createLine()

Renvoie une nouvelle ligne de texte à mettre en page s'il y a du texte à insérer 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 celle-ci est vide. La mise en page gère 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 la fonction ` QTextLine::setLineWidth()` appelée, une nouvelle ligne peut être créée et remplie de texte. La répétition de ce processus permettra de mettre en page l’intégralité du bloc de texte contenu dans ` QTextLayout`. S’il ne reste plus de texte à insérer dans la mise en page, l’objet ` QTextLine ` renvoyé ne sera pas valide (la fonction `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 également setCursorMoveStyle().

void QTextLayout::draw(QPainter *p, const QPointF &pos, const QList<QTextLayout::FormatRange> &selections = QList<FormatRange>(), const QRectF &clip = QRectF()) const

Dessine l'intégralité de la mise en page sur l'objet « painter » p à l'emplacement spécifié par pos. La mise en page rendue inclut l'selections donné et est découpée dans le 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 l'width s spécifiées à l'position indiquée, en utilisant l'painter spécifiée. 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'position indiquée, en utilisant l'painter spécifiée. La position correspondante dans le texte est indiquée par cursorPosition.

Il s'agit d'une fonction surchargée.

void QTextLayout::endLayout()

Met fin au processus de mise en page.

Voir également 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 également 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 de la liste « length » à partir de la position « from » dans cette liste « QTextLayout ». Il s’agit d’une fonction coûteuse en ressources, qui ne doit pas être appelée dans un contexte où le temps est un facteur critique.

Si from est inférieur à zéro, la séquence de glyphes commencera au premier caractère de la mise en page. Si length est inférieur à zéro, elle s’étendra sur toute la chaîne à partir de la position de départ.

Remarque : cela équivaut à 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 de la liste « length » à partir de la position « from » dans cette liste « QTextLayout ». Il s’agit d’une fonction coûteuse en ressources, qui ne doit pas être appelée dans un contexte où le temps est un facteur critique.

Si from est inférieur à zéro, la séquence de glyphes commencera au premier caractère de la mise en page. Si length est inférieur à zéro, elle s’étendra sur toute la chaîne à partir de la position de départ.

retrievalFlags spécifie quelles propriétés de QGlyphRun seront récupérées à partir de la mise en page. Afin de minimiser les allocations et la consommation de mémoire, cette valeur doit être définie de manière à n’inclure que 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 également ` 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, car elles se trouvent à 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 caractères Unicode ou plus formant 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 diaérèse combinatoire (0x308). Un curseur de texte ne peut être valablement positionné qu’avant ou après ces deux caractères, jamais entre eux, car cela n’aurait aucun sens. Dans les langues indiennes, chaque syllabe forme un groupe de graphèmes.

int QTextLayout::leftCursorPosition(int oldPos) const

Renvoie la position du curseur à gauche de oldPos, juste à côté de celui-ci. Cette position dépend de la position visuelle des caractères, après réorganisation bidirectionnelle.

Voir également rightCursorPosition() et previousCursorPosition().

QTextLine QTextLayout::lineAt(int i) const

Renvoie la i-ième ligne de texte dans cette mise en page.

Voir également lineCount() et lineForTextPosition().

int QTextLayout::lineCount() const

Renvoie le nombre de lignes de cette mise en page de texte.

Voir aussi lineAt().

QTextLine QTextLayout::lineForTextPosition(int pos) const

Renvoie la ligne contenant la position du curseur spécifiée par pos.

Voir également isValidCursorPosition() et lineAt().

qreal QTextLayout::maximumWidth() const

Largeur maximale à laquelle la mise en page peut s'étendre ; il s'agit essentiellement de la largeur totale du texte.

Avertissement : 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 requise par la mise en page. Il s’agit de la largeur de la plus petite sous-chaîne non divisible de la mise en page.

Avertissement : cette fonction ne renvoie une valeur valide qu'une fois la mise en page effectuée.

Voir également maximumWidth().

int QTextLayout::nextCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const

Renvoie la position de curseur valide suivante après oldPos qui respecte l'mode de curseur indiquée. Renvoie la valeur de oldPos si oldPos n'est pas une position de curseur valide.

Voir également isValidCursorPosition() et previousCursorPosition().

QPointF QTextLayout::position() const

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 dans la mise en page du texte qui sera traitée avant que la modification n'ait lieu.

Voir également preeditAreaText().

QString QTextLayout::preeditAreaText() const

Renvoie le texte inséré dans la mise en page avant toute modification.

Voir également preeditAreaPosition().

int QTextLayout::previousCursorPosition(int oldPos, QTextLayout::CursorMode mode = SkipCharacters) const

Renvoie la première position de curseur valide avant oldPos qui respecte l'mode de curseur indiquée. Renvoie la valeur de oldPos si oldPos n'est pas une position de curseur valide.

Voir également isValidCursorPosition() et nextCursorPosition().

int QTextLayout::rightCursorPosition(int oldPos) const

Renvoie la position du curseur à droite de oldPos, juste à côté. Cette position dépend de la position visuelle des caractères, après réorganisation bidirectionnelle.

Voir également leftCursorPosition() et nextCursorPosition().

void QTextLayout::setCacheEnabled(bool enable)

Active la mise en cache de toutes les informations de mise en page si enable est défini sur « true » ; dans le cas contraire, désactive la mise en cache de la mise en page. En règle générale, la fonction QTextLayout supprime la plupart des informations de mise en page après un appel à endLayout() afin de réduire la consommation de mémoire. Si vous souhaitez toutefois afficher le texte mis en page immédiatement après, l’activation de la mise en cache peut accélérer considérablement l’affichage.

Voir également cacheEnabled().

void QTextLayout::setCursorMoveStyle(Qt::CursorMoveStyle style)

Définit le style de déplacement visuel du curseur selon l'style. Si l'QTextLayout est associée à un document, vous pouvez ignorer cette option et utiliser celle décrite à l'adresse QTextDocument; cette option est destinée aux widgets tels que QLineEdit ou aux widgets personnalisés ne disposant pas d'un QTextDocument. La valeur par défaut est Qt::LogicalMoveStyle.

Voir également cursorMoveStyle().

void QTextLayout::setFont(const QFont &font)

Définit la police de la mise en page sur celle spécifiée à l'adresse font. La mise en page est invalidée et doit être recalculée.

Voir également font().

void QTextLayout::setFormats(const QList<QTextLayout::FormatRange> &formats)

Définit les formats supplémentaires pris en charge par la mise en page du texte sur formats. Les formats sont appliqués sans modifier le texte de la zone de pré-édition.

Voir également formats() et clearFormats().

void QTextLayout::setPosition(const QPointF &p)

Déplace la mise en page du texte vers l'adresse p.

Voir également position().

void QTextLayout::setPreeditArea(int position, const QString &text)

Définit les propriétés position et text de la zone de la mise en page qui est traitée avant que la modification n'ait lieu. La mise en page est invalidée et doit être recalculée.

Voir également preeditAreaPosition() et preeditAreaText().

void QTextLayout::setText(const QString &string)

Définit le texte de la mise en page selon l'string fournie. La mise en page est invalidée et doit être recalculée.

Notez que lorsque cette méthode ` QTextLayout ` est utilisée dans le cadre d’une ` QTextDocument `, elle n’aura aucun effet.

Voir également text().

void QTextLayout::setTextOption(const QTextOption &option)

Définit la structure des options de texte qui contrôle le processus de mise en page sur la valeur indiquée option.

Voir également textOption().

QString QTextLayout::text() const

Renvoie le texte de la mise en page.

Voir aussi setText().

const QTextOption &QTextLayout::textOption() const

Renvoie l'option de texte actuellement utilisée pour contrôler le processus de mise en page.

Voir également 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.