本页内容

QAbstractTextDocumentLayout Class

QAbstractTextDocumentLayout 类是一个用于为 QTextDocument 实现自定义布局的抽象基类。更多内容...

头文件: #include <QAbstractTextDocumentLayout>
CMake: find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui)
qmake: QT += gui
继承自: QObject
被继承者:

QPlainTextDocumentLayout

注意:该类中的所有函数均为可重入的。

公共类型

struct PaintContext
struct Selection

公共函数

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)

信号

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

受保护函数

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)

详细说明

Qt 提供的标准布局可以处理简单的文字处理,包括行内图像、列表和表格。

某些应用程序(例如文字处理软件或 DTP 应用程序)可能需要比 Qt 布局引擎提供的更多功能,在这种情况下,您可以继承 QAbstractTextDocumentLayout 类,为您的文本文档提供自定义的布局行为。

QAbstractTextDocumentLayout 子类的实例可以通过setDocumentLayout() 函数安装到QTextDocument 对象上。

您可以将自定义对象插入到QTextDocument 中;详情请参阅QTextObjectInterface 类的描述。

另请参阅 QTextObjectInterface 。

成员函数文档

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

为给定的document 创建一个新的文本文档版式。

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

返回给定position 对应的锚点引用;如果该位置不存在锚点,则返回空字符串。

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

返回block 的边界矩形。

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

返回其marker 位于给定位置pos 处的块(通常为列表项)。

QTextDocument *QAbstractTextDocumentLayout::document() const

返回该布局正在处理的文本文档。

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

每当文档内容发生变化时,都会调用此函数。当插入文本、删除文本或同时进行这两种操作时,即视为发生变化。变化由以下参数指定:position (表示变化的起始字符位置)、charsRemoved (表示从文档中删除的字符数)和charsAdded (表示添加的字符数)。

例如,当将文本“Hello”插入到一个空文档中时,charsRemoved 为 0,charsAdded 为 5(即字符串的长度)。

文本替换是删除和插入的组合。例如,如果文本“Hello”被替换为“Hi”,则charsRemoved 的值为5,charsAdded 的值为2。

对于 `QAbstractTextDocumentLayout` 的子类而言,这是核心函数,文档内容的布局和定位工作很大一部分都在此完成。

例如,在一个仅负责排列文本块的子类中,该函数的实现需要执行以下操作:

另请参阅 QTextLayout 。

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

返回文档布局的总大小。

显示控件可利用此信息正确更新其滚动条。

另请参阅 documentSizeChanged() 和QTextDocument::pageSize 。

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

当文档布局的大小变为newSize 时,会发出此信号。

QAbstractTextDocumentLayout 的子类应在文档的整个布局大小发生变化时发出此信号。此信号对于显示文本文档的小部件非常有用,因为它能使这些小部件正确更新其滚动条。

另请参阅 documentSize()。

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

使用给定的context ,根据给定的painter 绘制布局。

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

调用此函数以使用指定的文本format ,在由rect 指定的矩形内,绘制内联对象object ,并使用给定的painter 。

posInDocument 指定对象在文档中的位置。

默认实现会调用对象处理程序中的 drawObject()。此函数仅在 Qt 环境中被调用。子类可以重写此函数,以自定义内联对象的绘制方式。

另请参阅 draw()。

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

返回在给定的position 下适用的字符格式。

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

返回给定位置pos 处的文本格式。

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

返回frame 的边界矩形。

QTextObjectInterface *QAbstractTextDocumentLayout::handlerForObject(int objectType) const

返回一个用于处理指定objectType 对象的处理程序。

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

返回给定point 对应的游标位置,该位置由指定的accuracy 确定。如果未找到有效的游标位置,则返回-1。

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

返回指定位置pos 处的图像源,如果该位置不存在图像,则返回空字符串。

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

返回布局中包含的页面数。

另请参阅 pageCountChanged()。

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

当版面中的页数发生变化时,会发出此信号;newPages 是更新后的页数。

QAbstractTextDocumentLayout 的子类应在布局中的页数发生变化时发出此信号。页数的变化是由布局或文档内容本身的变更引起的。

另请参阅 pageCount()。

QPaintDevice *QAbstractTextDocumentLayout::paintDevice() const

返回用于渲染文档布局的绘图设备。

另请参阅 setPaintDevice()。

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

使用给定的文本format 布局内联对象item 。

posInDocument 指定对象在文档中的位置。

默认实现不执行任何操作。此函数仅在 Qt 内部被调用。子类可以重写此函数以自定义内联对象的位置。

另请参阅 drawInlineObject()。

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

将给定的component 注册为给定objectType 项的处理程序。

注意: 对于每种对象类型,都必须调用一次registerHandler ()。这意味着,对于同一对象类型的多个替换字符,仅存在一个处理程序。

文本文档布局不会获取component 的所有权。

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

设置与文本format 对应的内联对象item 的大小。

posInDocument 指定该对象在文档中的位置。

默认实现会将item 调整为对象处理程序的intrinsicSize()函数返回的大小。该函数仅在Qt内部被调用。子类可以重写此函数,以自定义内联对象的尺寸调整行为。

void QAbstractTextDocumentLayout::setPaintDevice(QPaintDevice *device)

将用于渲染文档布局的绘图设备设置为指定的device 。

另请参阅 paintDevice()。

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

取消将给定的component 注册为给定objectType 项的处理程序;如果未指定component ,则取消注册所有处理程序。

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

当矩形rect 被更新时,会发出此信号。

QAbstractTextDocumentLayout 的子类在内容布局发生变化时,应发出此信号以触发重绘。

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

当指定的block 发生更新时,会发出此信号。

当block 的布局发生变化时,QAbstractTextDocumentLayout 的子类应发出此信号,以便重新绘制。

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