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 |
- Liste de tous les membres, y compris les membres hérités
- QTextLayout fait partie des API de traitement de texte enrichi.
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 :
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
| Constante | Valeur |
|---|---|
QTextLayout::SkipCharacters | 0 |
QTextLayout::SkipWords | 1 |
[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.
| Constante | Valeur | Description |
|---|---|---|
QTextLayout::RetrieveGlyphIndexes | 0x1 | Récupère les index de la police correspondant aux glyphes. |
QTextLayout::RetrieveGlyphPositions | 0x2 | Récupère les positions relatives des glyphes dans la mise en page. |
QTextLayout::RetrieveStringIndexes | 0x4 | Récupère les index de la chaîne d'origine qui correspondent à chacun des glyphes. |
QTextLayout::RetrieveString | 0x8 | Récupère la chaîne source d'origine à partir de la mise en page. |
QTextLayout::RetrieveAll | 0xffff | Ré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.