QAbstractTextDocumentLayout Class

Die Klasse QAbstractTextDocumentLayout ist eine abstrakte Basisklasse, die zur Implementierung benutzerdefinierter Layouts für QTextDocuments verwendet wird. Mehr...

Kopfzeile: #include <QAbstractTextDocumentLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
Vererbt: QObject
Vererbt von:

QPlainTextDocumentLayout

Hinweis: Alle Funktionen in dieser Klasse sind reentrant.

Öffentliche Typen

struct PaintContext
struct Selection

Öffentliche Funktionen

QAbstractTextDocumentLayout(QTextDocument *document)
QString anchorAt(const QPointF &position) const
virtual QRectF blockBoundingRect(const QTextBlock &block) const = 0
QTextBlock blockWithMarkerAt(const QPointF &pos) const
QTextDocument *document() const
virtual QSizeF documentSize() const = 0
virtual void draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context) = 0
QTextFormat formatAt(const QPointF &pos) const
virtual QRectF frameBoundingRect(QTextFrame *frame) const = 0
QTextObjectInterface *handlerForObject(int objectType) const
virtual int hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const = 0
QString imageAt(const QPointF &pos) const
virtual int pageCount() const = 0
QPaintDevice *paintDevice() const
void registerHandler(int objectType, QObject *component)
void setPaintDevice(QPaintDevice *device)
void unregisterHandler(int objectType, QObject *component = nullptr)

Signale

void documentSizeChanged(const QSizeF &newSize)
void pageCountChanged(int newPages)
void update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.))
void updateBlock(const QTextBlock &block)

Geschützte Funktionen

virtual void documentChanged(int position, int charsRemoved, int charsAdded) = 0
virtual void drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format)
QTextCharFormat format(int position)
virtual void positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)
virtual void resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)

Detaillierte Beschreibung

Das von Qt bereitgestellte Standard-Layout kann einfache Textverarbeitung einschließlich Inline-Bildern, Listen und Tabellen verarbeiten.

Einige Anwendungen, z.B. ein Textverarbeitungsprogramm oder eine DTP-Anwendung, benötigen möglicherweise mehr Funktionen als die, die von der Qt-Layout-Engine zur Verfügung gestellt werden. In diesem Fall können Sie eine Unterklasse QAbstractTextDocumentLayout erstellen, um benutzerdefiniertes Layout-Verhalten für Ihre Textdokumente bereitzustellen.

Eine Instanz der Unterklasse QAbstractTextDocumentLayout kann auf einem QTextDocument Objekt mit der Funktion setDocumentLayout() installiert werden.

Sie können benutzerdefinierte Objekte in ein QTextDocument Objekt einfügen; siehe die QTextObjectInterface Klassenbeschreibung für Details.

Siehe auch QTextObjectInterface.

Dokumentation der Mitgliedsfunktionen

[explicit] QAbstractTextDocumentLayout::QAbstractTextDocumentLayout(QTextDocument *document)

Erzeugt ein neues Textdokument-Layout für das angegebene document.

QString QAbstractTextDocumentLayout::anchorAt(const QPointF &position) const

Gibt die Referenz des Ankers an der angegebenen position zurück, oder eine leere Zeichenkette, wenn an diesem Punkt kein Anker existiert.

[pure virtual] QRectF QAbstractTextDocumentLayout::blockBoundingRect(const QTextBlock &block) const

Gibt das Begrenzungsrechteck von block zurück.

QTextBlock QAbstractTextDocumentLayout::blockWithMarkerAt(const QPointF &pos) const

Gibt den Block (wahrscheinlich ein Listenelement) zurück, dessen marker an der angegebenen Position pos gefunden wird.

QTextDocument *QAbstractTextDocumentLayout::document() const

Gibt das Textdokument zurück, für das dieses Layout verwendet wird.

[pure virtual protected] void QAbstractTextDocumentLayout::documentChanged(int position, int charsRemoved, int charsAdded)

Diese Funktion wird immer dann aufgerufen, wenn sich der Inhalt des Dokuments ändert. Eine Änderung liegt vor, wenn Text eingefügt, entfernt oder eine Kombination aus beidem wird. Die Änderung wird durch position, charsRemoved und charsAdded angegeben, die der Anfangsposition der Änderung, der Anzahl der aus dem Dokument entfernten Zeichen und der Anzahl der hinzugefügten Zeichen entsprechen.

Wenn Sie beispielsweise den Text "Hallo" in ein leeres Dokument einfügen, wäre charsRemoved gleich 0 und charsAdded gleich 5 (die Länge der Zeichenfolge).

Das Ersetzen von Text ist eine Kombination aus Entfernen und Einfügen. Wenn der Text "Hallo" beispielsweise durch "Hi" ersetzt wird, wäre charsRemoved gleich 5 und charsAdded gleich 2.

Für Unterklassen von QAbstractTextDocumentLayout ist dies die zentrale Funktion, bei der ein großer Teil der Arbeit für das Layout und die Positionierung der Dokumentinhalte erledigt wird.

In einer Unterklasse, die nur Textblöcke anordnet, müsste eine Implementierung dieser Funktion zum Beispiel Folgendes tun:

  • Ermitteln der Liste der geänderten QTextBlock(s) anhand der übergebenen Parameter.
  • Für jedes QTextBlock Objekt muss das entsprechende QTextLayout Objekt verarbeitet werden. Sie können auf das Layout von QTextBlock mit der Funktion QTextBlock::layout() zugreifen. Bei dieser Verarbeitung sollte die Seitengröße des Dokuments berücksichtigt werden.
  • Wenn sich die Gesamtzahl der Seiten geändert hat, sollte das Signal pageCountChanged() ausgegeben werden.
  • Wenn sich die Gesamtgröße geändert hat, sollte das Signal documentSizeChanged() ausgegeben werden.
  • Das Signal update() sollte ausgegeben werden, um einen Neuanstrich der Bereiche im Layout zu planen, die einen Neuanstrich benötigen.

Siehe auch QTextLayout.

[pure virtual] QSizeF QAbstractTextDocumentLayout::documentSize() const

Gibt die Gesamtgröße des Dokumentenlayouts zurück.

Diese Information kann von Anzeige-Widgets verwendet werden, um ihre Bildlaufleisten korrekt zu aktualisieren.

Siehe auch documentSizeChanged() und QTextDocument::pageSize.

[signal] void QAbstractTextDocumentLayout::documentSizeChanged(const QSizeF &newSize)

Dieses Signal wird ausgegeben, wenn sich die Größe des Dokumentenlayouts auf newSize ändert.

Unterklassen von QAbstractTextDocumentLayout sollten dieses Signal ausgeben, wenn sich die gesamte Layoutgröße des Dokuments ändert. Dieses Signal ist nützlich für Widgets, die Textdokumente anzeigen, da es ihnen ermöglicht, ihre Bildlaufleisten korrekt zu aktualisieren.

Siehe auch documentSize().

[pure virtual] void QAbstractTextDocumentLayout::draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context)

Zeichnet das Layout mit dem angegebenen painter unter Verwendung des angegebenen context.

[virtual protected] void QAbstractTextDocumentLayout::drawInlineObject(QPainter *painter, const QRectF &rect, QTextInlineObject object, int posInDocument, const QTextFormat &format)

Diese Funktion wird aufgerufen, um das Inline-Objekt object mit dem angegebenen painter innerhalb des durch rect angegebenen Rechtecks mit dem angegebenen Text format zu zeichnen.

posInDocument gibt die Position des Objekts innerhalb des Dokuments an.

Die Standard-Implementierung ruft drawObject() bei den Objekt-Handlern auf. Diese Funktion wird nur innerhalb von Qt aufgerufen. Unterklassen können diese Funktion reimplementieren, um das Zeichnen von Inline-Objekten anzupassen.

Siehe auch draw().

[protected] QTextCharFormat QAbstractTextDocumentLayout::format(int position)

Gibt das Zeichenformat zurück, das für die angegebene position gilt.

QTextFormat QAbstractTextDocumentLayout::formatAt(const QPointF &pos) const

Gibt das Textformat an der angegebenen Position pos zurück.

[pure virtual] QRectF QAbstractTextDocumentLayout::frameBoundingRect(QTextFrame *frame) const

Gibt das Begrenzungsrechteck von frame zurück.

QTextObjectInterface *QAbstractTextDocumentLayout::handlerForObject(int objectType) const

Gibt einen Handler für Objekte der angegebenen objectType zurück.

[pure virtual] int QAbstractTextDocumentLayout::hitTest(const QPointF &point, Qt::HitTestAccuracy accuracy) const

Gibt die Cursorposition für die angegebene point mit dem angegebenen accuracy zurück. Gibt -1 zurück, wenn keine gültige Cursorposition gefunden wurde.

QString QAbstractTextDocumentLayout::imageAt(const QPointF &pos) const

Gibt die Quelle des Bildes an der angegebenen Position pos zurück, oder eine leere Zeichenkette, wenn an dieser Stelle kein Bild existiert.

[pure virtual] int QAbstractTextDocumentLayout::pageCount() const

Gibt die Anzahl der im Layout enthaltenen Seiten zurück.

Siehe auch pageCountChanged().

[signal] void QAbstractTextDocumentLayout::pageCountChanged(int newPages)

Dieses Signal wird ausgegeben, wenn sich die Anzahl der Seiten im Layout ändert; newPages ist die aktualisierte Seitenzahl.

Unterklassen von QAbstractTextDocumentLayout sollten dieses Signal ausgeben, wenn sich die Anzahl der Seiten im Layout geändert hat. Änderungen der Seitenzahl werden durch Änderungen des Layouts oder des Dokumentinhalts selbst verursacht.

Siehe auch pageCount().

QPaintDevice *QAbstractTextDocumentLayout::paintDevice() const

Gibt das Malgerät zurück, mit dem das Layout des Dokuments gerendert wurde.

Siehe auch setPaintDevice().

[virtual protected] void QAbstractTextDocumentLayout::positionInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)

Legt das Inline-Objekt item mit dem angegebenen Text format aus.

posInDocument gibt die Position des Objekts innerhalb des Dokuments an.

Die Standardimplementierung tut nichts. Diese Funktion wird nur innerhalb von Qt aufgerufen. Unterklassen können diese Funktion reimplementieren, um die Position von Inline-Objekten anzupassen.

Siehe auch drawInlineObject().

void QAbstractTextDocumentLayout::registerHandler(int objectType, QObject *component)

Registriert das angegebene component als Handler für Objekte des angegebenen objectType.

Hinweis: registerHandler() muss für jeden Objekttyp einmal aufgerufen werden. Dies bedeutet, dass es nur einen Handler für mehrere Ersetzungszeichen desselben Objekttyps gibt.

Das Textdokument-Layout übernimmt nicht das Eigentum an component.

[virtual protected] void QAbstractTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)

Legt die Größe des Inline-Objekts item entsprechend dem Text format fest.

posInDocument gibt die Position des Objekts innerhalb des Dokuments an.

Die Standardimplementierung passt die Größe von item an die Größe an, die von der Funktion intrinsicSize() des Object Handlers zurückgegeben wird. Diese Funktion wird nur innerhalb von Qt aufgerufen. Unterklassen können diese Funktion reimplementieren, um die Größenänderung von Inline-Objekten anzupassen.

void QAbstractTextDocumentLayout::setPaintDevice(QPaintDevice *device)

Setzt das Malgerät, das für die Darstellung des Dokumentlayouts verwendet wird, auf die angegebene device.

Siehe auch paintDevice().

void QAbstractTextDocumentLayout::unregisterHandler(int objectType, QObject *component = nullptr)

Hebt die Registrierung des angegebenen component als Handler für Elemente des angegebenen objectType auf, oder eines beliebigen Handlers, wenn component nicht angegeben ist.

[signal] void QAbstractTextDocumentLayout::update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.))

Dieses Signal wird ausgesendet, wenn das Rechteck rect aktualisiert wurde.

Unterklassen von QAbstractTextDocumentLayout sollten dieses Signal ausgeben, wenn sich das Layout des Inhalts ändert, um es neu zu malen.

[signal] void QAbstractTextDocumentLayout::updateBlock(const QTextBlock &block)

Dieses Signal wird ausgesendet, wenn die angegebene block aktualisiert wurde.

Unterklassen von QAbstractTextDocumentLayout sollten dieses Signal ausgeben, wenn sich das Layout von block geändert hat, um es neu zu malen.

© 2025 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.