Auf dieser Seite

QTextLayout Class

Die Klasse „QTextLayout“ dient zum Layout und zur Darstellung von Text. Mehr...

Header: #include <QTextLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui

Hinweis: Alle Funktionen dieser Klasse sind reentrant.

Öffentliche Typen

struct FormatRange
enum CursorMode { SkipCharacters, SkipWords }
(since 6.5) enum GlyphRunRetrievalFlag { RetrieveGlyphIndexes, RetrieveGlyphPositions, RetrieveStringIndexes, RetrieveString, RetrieveAll }
flags GlyphRunRetrievalFlags

Öffentliche Funktionen

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

Ausführliche Beschreibung

Sie bietet viele Funktionen, die man von einer modernen Text-Layout-Engine erwartet, darunter Unicode-konforme Darstellung, Zeilenumbrüche und die Handhabung der Cursorposition. Sie kann zudem geräteunabhängige Layouts erzeugen und darstellen, was für WYSIWYG-Anwendungen wichtig ist.

Die Klasse verfügt über eine eher low-level API, und sofern Sie nicht beabsichtigen, eine eigene Textdarstellung für ein spezielles Widget zu implementieren, werden Sie sie wahrscheinlich nicht direkt nutzen müssen.

QTextLayout kann sowohl mit einfachem als auch mit Rich-Text verwendet werden.

Mit QTextLayout lässt sich eine Folge von „ QTextLine “-Instanzen mit vorgegebenen Breiten erstellen und diese unabhängig voneinander auf dem Bildschirm positionieren. Sobald das Layout fertig ist, können diese Zeilen auf einem Zeichen-Device gezeichnet werden.

Der zu layoutende Text kann im Konstruktor übergeben oder mit ` setText()` festgelegt werden.

Das Layout kann als Folge von „ QTextLine “-Objekten betrachtet werden; verwenden Sie „ createLine()“, um eine „ QTextLine “-Instanz zu erstellen, und „ lineAt()“ oder „ lineForTextPosition()“, um die erstellten Zeilen abzurufen.

Hier ist ein Codeausschnitt, der die Layoutphase veranschaulicht:

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

Der Text kann dann durch Aufruf der Funktion „ draw()“ des Layouts gerendert werden:

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

Es ist auch möglich, jede Zeile einzeln zu zeichnen, beispielsweise um die letzte Zeile zu zeichnen, die in ein Widget passt, das sonst abgeschnitten würde:

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

Für eine bestimmte Position im Text können Sie mit ` isValidCursorPosition()`, ` nextCursorPosition()` und ` previousCursorPosition()` eine gültige Cursorposition ermitteln.

Das QTextLayout selbst kann mit ` setPosition()` positioniert werden; es verfügt über ` boundingRect()`, ` minimumWidth()` und ` maximumWidth()`.

Siehe auch „ QStaticText “.

Dokumentation zu Mitgliedstypen

enum QTextLayout::CursorMode

KonstanteWert
QTextLayout::SkipCharacters0
QTextLayout::SkipWords1

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

GlyphRunRetrievalFlag legt die an die Funktionen ` glyphRuns()` übergebenen Flags fest, um zu bestimmen, welche Eigenschaften des Layouts in den ` QGlyphRun `-Objekten zurückgegeben werden. Da jede Eigenschaft Speicherplatz beansprucht und möglicherweise zusätzliche Speicherzuweisungen erfordert, empfiehlt es sich, nur die Eigenschaften anzufordern, auf die Sie später zugreifen müssen.

KonstanteWertBeschreibung
QTextLayout::RetrieveGlyphIndexes0x1Ruft die Indizes in der Schriftart ab, die den Glyphen entsprechen.
QTextLayout::RetrieveGlyphPositions0x2Ruft die relativen Positionen der Glyphen im Layout ab.
QTextLayout::RetrieveStringIndexes0x4Ruft die Indizes in der ursprünglichen Zeichenfolge ab, die den einzelnen Glyphen entsprechen.
QTextLayout::RetrieveString0x8Ruft die ursprüngliche Quellzeichenfolge aus dem Layout ab.
QTextLayout::RetrieveAll0xffffRuft alle verfügbaren Eigenschaften des Layouts ab.

Diese Enumeration wurde in Qt 6.5 eingeführt.

Der Typ `GlyphRunRetrievalFlags` ist ein `typedef` für `QFlags<GlyphRunRetrievalFlag>`. Er speichert eine ODER-Kombination von `GlyphRunRetrievalFlag`-Werten.

Siehe auch „ glyphRuns()“ und „ QTextLine::glyphRuns()“.

Dokumentation zu den Mitgliedsfunktionen

QTextLayout::QTextLayout()

Erstellt ein leeres Textlayout.

Siehe auch „ setText()“.

QTextLayout::QTextLayout(const QString &text)

Erstellt ein Textlayout zur Darstellung der angegebenen „ text “.

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

Erstellt ein Textlayout, um das angegebene „ text “ mit dem angegebenen „ font “ zu formatieren.

Alle Metrik- und Layoutberechnungen werden auf Basis des Darstellungsgeräts „ paintdevice “ durchgeführt. Ist „ paintdevice “ auf „ nullptr “ gesetzt, erfolgen die Berechnungen anhand der Bildschirmmetrik.

[noexcept] QTextLayout::~QTextLayout()

Löst das Layout auf.

void QTextLayout::beginLayout()

Startet den Layout-Vorgang.

Warnung: Dadurch wird das Layout ungültig, daher sollten nun alle vorhandenen „ QTextLine “-Objekte, die auf den vorherigen Inhalt verweisen, verworfen werden.

Siehe auch ` endLayout()`.

QRectF QTextLayout::boundingRect() const

Das kleinste Rechteck, das alle Linien im Layout enthält.

bool QTextLayout::cacheEnabled() const

Gibt „ true “ zurück, wenn die vollständigen Layout-Informationen im Cache gespeichert sind; andernfalls wird „ false “ zurückgegeben.

Siehe auch setCacheEnabled().

void QTextLayout::clearFormats()

Löscht die Liste der zusätzlichen Formate, die vom Textlayout unterstützt werden.

Siehe auch „ formats()“ und „ setFormats()“.

void QTextLayout::clearLayout()

Löscht die Zeileninformationen im Layout. Nach dem Aufruf dieser Funktion gibt ` lineCount()` den Wert 0 zurück.

Warnung: Dadurch wird das Layout ungültig, sodass alle vorhandenen ` QTextLine `-Objekte, die auf den bisherigen Inhalt verweisen, nun verworfen werden sollten.

QTextLine QTextLayout::createLine()

Gibt eine neue Textzeile zurück, die im Layout gesetzt werden soll, sofern Text in das Layout eingefügt werden soll; andernfalls wird eine ungültige Textzeile zurückgegeben.

Das Textlayout erstellt ein neues Zeilenobjekt, das nach der letzten Zeile im Layout beginnt oder am Anfang, falls das Layout leer ist. Das Layout verwaltet einen internen Cursor, und jede Zeile wird beim Aufruf der Funktion ` QTextLine::setLineWidth()` ab der Cursorposition mit Text gefüllt.

Sobald ` QTextLine::setLineWidth()` aufgerufen wurde, kann eine neue Zeile erstellt und mit Text gefüllt werden. Durch Wiederholen dieses Vorgangs wird der gesamte im ` QTextLayout` enthaltene Textblock gesetzt. Wenn kein Text mehr vorhanden ist, der in das Layout eingefügt werden kann, ist das zurückgegebene ` QTextLine ` ungültig (`isValid()` gibt „false“ zurück).

Qt::CursorMoveStyle QTextLayout::cursorMoveStyle() const

Der Stil der Cursorbewegung dieses QTextLayout. Die Standardeinstellung ist Qt::LogicalMoveStyle.

Siehe auch setCursorMoveStyle().

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

Zeichnet das gesamte Layout auf den „Painter“ p an der durch pos angegebenen Position. Das gerenderte Layout enthält das angegebene selections und wird auf das durch clip angegebene Rechteck zugeschnitten.

void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition, int width) const

Zeichnet einen Textcursor mit dem aktuellen Stift und dem angegebenen „ width “ an der angegebenen „ position “ unter Verwendung des angegebenen „ painter “. Die entsprechende Position innerhalb des Textes wird durch „ cursorPosition “ festgelegt.

void QTextLayout::drawCursor(QPainter *painter, const QPointF &position, int cursorPosition) const

Zeichnet einen Textcursor mit dem aktuellen Stift an der angegebenen Position ` position ` unter Verwendung der angegebenen ` painter `. Die entsprechende Position innerhalb des Textes wird durch ` cursorPosition` festgelegt.

Dies ist eine überladene Funktion.

void QTextLayout::endLayout()

Beendet den Layout-Vorgang.

Siehe auch ` beginLayout()`.

QFont QTextLayout::font() const

Gibt die aktuell für das Layout verwendete Schriftart zurück oder, falls keine festgelegt ist, eine Standardschriftart.

Siehe auch „ setFont()“.

QList<QTextLayout::FormatRange> QTextLayout::formats() const

Gibt die Liste der zusätzlichen Formate zurück, die vom Textlayout unterstützt werden.

Siehe auch setFormats() und clearFormats().

QList<QGlyphRun> QTextLayout::glyphRuns(int from = -1, int length = -1) const

Gibt die Glyphenindizes und -positionen für alle Glyphen zurück, die den Zeichen unter length entsprechen und an der Position from in diesem QTextLayout beginnen. Diese Funktion ist rechenintensiv und sollte nicht in einem zeitkritischen Kontext aufgerufen werden.

Ist from kleiner als Null, beginnt der Glyphenlauf beim ersten Zeichen im Layout. Ist length kleiner als Null, erstreckt er sich über die gesamte Zeichenkette ab der Startposition.

Hinweis: Dies entspricht dem Aufruf von `glyphRuns(from, length, QTextLayout::GlyphRunRetrievalFlag::GlyphIndexes | QTextLayout::GlyphRunRetrievalFlag::GlyphPositions)`.

Dies ist eine überladene Funktion.

Siehe auch draw() und QPainter::drawGlyphRun().

[since 6.5] QList<QGlyphRun> QTextLayout::glyphRuns(int from, int length, QTextLayout::GlyphRunRetrievalFlags retrievalFlags) const

Gibt die Glyphenindizes und -positionen für alle Glyphen zurück, die den Zeichen „ length “ entsprechen, beginnend an der Position „ from “ in diesem „ QTextLayout “. Diese Funktion ist rechenintensiv und sollte nicht in einem zeitkritischen Kontext aufgerufen werden.

Ist from kleiner als Null, beginnt die Glyphenfolge beim ersten Zeichen im Layout. Ist length kleiner als Null, erstreckt sie sich über die gesamte Zeichenkette ab der Startposition.

Der Parameter „ retrievalFlags “ legt fest, welche Eigenschaften des „ QGlyphRun “ aus dem Layout abgerufen werden. Um Speicherzuweisungen und Speicherverbrauch zu minimieren, sollte dieser so eingestellt werden, dass nur die Eigenschaften einbezogen werden, auf die Sie später zugreifen müssen.

Dies ist eine überladene Funktion.

Diese Funktion wurde in Qt 6.5 eingeführt.

Siehe auch „ draw()“ und „ QPainter::drawGlyphRun()“.

bool QTextLayout::isValidCursorPosition(int pos) const

Gibt „ true “ zurück, wenn die Position „ pos “ eine gültige Cursorposition ist.

In einem Unicode-Kontext sind einige Positionen im Text keine gültigen Cursorpositionen, da sich die Position innerhalb eines Unicode-Surrogats oder eines Graphemclusters befindet.

Ein Graphemcluster ist eine Folge von zwei oder mehr Unicode-Zeichen, die auf dem Bildschirm eine unteilbare Einheit bilden. Beispielsweise kann das lateinische Zeichen `Ä' in Unicode durch zwei Zeichen dargestellt werden: `A' (0x41) und die kombinierende Trema (0x308). Ein Textcursor kann nur vor oder hinter diesen beiden Zeichen gültig positioniert werden, niemals zwischen ihnen, da dies keinen Sinn ergeben würde. In indischen Sprachen bildet jede Silbe einen Graphemcluster.

int QTextLayout::leftCursorPosition(int oldPos) const

Gibt die Cursorposition links von oldPos sowie direkt daneben zurück. Diese hängt von der visuellen Position der Zeichen nach der bidirektionalen Neuordnung ab.

Siehe auch „ rightCursorPosition()“ und „ previousCursorPosition()“.

QTextLine QTextLayout::lineAt(int i) const

Gibt die i-te Textzeile in diesem Textlayout zurück.

Siehe auch „ lineCount()“ und „ lineForTextPosition()“.

int QTextLayout::lineCount() const

Gibt die Anzahl der Zeilen in diesem Textlayout zurück.

Siehe auch „ lineAt()“.

QTextLine QTextLayout::lineForTextPosition(int pos) const

Gibt die Zeile zurück, die die durch ` pos` angegebene Cursorposition enthält.

Siehe auch „ isValidCursorPosition()“ und „ lineAt()“.

qreal QTextLayout::maximumWidth() const

Die maximale Breite, auf die sich das Layout ausdehnen kann; dies entspricht im Wesentlichen der Breite des gesamten Textes.

Warnung: Diese Funktion gibt erst dann einen gültigen Wert zurück, wenn das Layout fertiggestellt ist.

Siehe auch minimumWidth().

qreal QTextLayout::minimumWidth() const

Die Mindestbreite, die das Layout benötigt. Dies ist die Breite der kleinsten nicht trennbaren Teilzeichenfolge des Layouts.

Warnung: Diese Funktion gibt erst dann einen gültigen Wert zurück, wenn das Layout fertiggestellt ist.

Siehe auch „ maximumWidth()“.

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

Gibt die nächste gültige Cursorposition nach oldPos zurück, die dem angegebenen Cursor mode entspricht. Gibt den Wert von oldPos zurück, wenn oldPos keine gültige Cursorposition ist.

Siehe auch isValidCursorPosition() und previousCursorPosition().

QPointF QTextLayout::position() const

Die globale Position des Layouts. Diese ist unabhängig vom Begrenzungsrechteck und vom Layout-Prozess.

Siehe auch setPosition().

int QTextLayout::preeditAreaPosition() const

Gibt die Position des Bereichs im Textlayout zurück, der vor der Bearbeitung verarbeitet wird.

Siehe auch „ preeditAreaText()“.

QString QTextLayout::preeditAreaText() const

Gibt den Text zurück, der vor der Bearbeitung in das Layout eingefügt wurde.

Siehe auch „ preeditAreaPosition()“.

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

Gibt die erste gültige Cursorposition vor oldPos zurück, die die angegebene Cursor mode berücksichtigt. Gibt den Wert von oldPos zurück, wenn oldPos keine gültige Cursorposition ist.

Siehe auch isValidCursorPosition() und nextCursorPosition().

int QTextLayout::rightCursorPosition(int oldPos) const

Gibt die Cursorposition rechts neben oldPos zurück, direkt daneben. Diese hängt von der visuellen Position der Zeichen nach der bidirektionalen Neuanordnung ab.

Siehe auch „ leftCursorPosition()“ und „ nextCursorPosition()“.

void QTextLayout::setCacheEnabled(bool enable)

Aktiviert das Zwischenspeichern der vollständigen Layout-Informationen, wenn „ enable “ auf „true“ gesetzt ist; andernfalls wird das Layout-Caching deaktiviert. Normalerweise verwirft „ QTextLayout “ nach einem Aufruf von „ endLayout()“ den Großteil der Layout-Informationen, um den Speicherverbrauch zu reduzieren. Wenn Sie den layouteten Text jedoch direkt danach zeichnen möchten, kann die Aktivierung des Caching den Zeichnungsvorgang erheblich beschleunigen.

Siehe auch cacheEnabled().

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

Legt den Stil für die visuelle Cursorbewegung auf den angegebenen Wert fest: style. Wenn der QTextLayout auf einem Dokument basiert, können Sie diese Option ignorieren und stattdessen die Option unter QTextDocument verwenden. Diese Option ist für Widgets wie QLineEdit oder benutzerdefinierte Widgets ohne QTextDocument vorgesehen. Der Standardwert ist Qt::LogicalMoveStyle.

Siehe auch cursorMoveStyle().

void QTextLayout::setFont(const QFont &font)

Setzt die Schriftart des Layouts auf die angegebene „ font “. Das Layout wird ungültig und muss neu erstellt werden.

Siehe auch font().

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

Legt die vom Textlayout unterstützten zusätzlichen Formate auf „ formats “ fest. Die Formate werden auf den Text im Vorbearbeitungsbereich angewendet, ohne diesen zu entfernen.

Siehe auch ` formats()` und ` clearFormats()`.

void QTextLayout::setPosition(const QPointF &p)

Verschiebt das Textlayout auf den Punkt „ p “.

Siehe auch position().

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

Legt die Werte „ position “ und „ text “ des Bereichs im Layout fest, der vor der Bearbeitung verarbeitet wird. Das Layout wird ungültig und muss neu erstellt werden.

Siehe auch preeditAreaPosition() und preeditAreaText().

void QTextLayout::setText(const QString &string)

Setzt den Text des Layouts auf den angegebenen string. Das Layout wird ungültig und muss neu angelegt werden.

Beachten Sie, dass diese Methode keine Wirkung hat, wenn diese „ QTextLayout “ als Teil eines „ QTextDocument “ verwendet wird.

Siehe auch ` text()`.

void QTextLayout::setTextOption(const QTextOption &option)

Setzt die Textoptionsstruktur, die den Layoutprozess steuert, auf den angegebenen Wert „ option “.

Siehe auch textOption().

QString QTextLayout::text() const

Gibt den Text des Layouts zurück.

Siehe auch „ setText()“.

const QTextOption &QTextLayout::textOption() const

Gibt die aktuell verwendete Textoption zurück, mit der der Layoutprozess gesteuert wird.

Siehe auch „ 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.