QAbstractTextDocumentLayout Class
QAbstractTextDocumentLayout 类是一个用于为 QTextDocument 实现自定义布局的抽象基类。更多内容...
| 头文件: | #include <QAbstractTextDocumentLayout> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 继承自: | QObject |
| 被继承者: |
- 所有成员列表(包括继承的成员)
- QAbstractTextDocumentLayout 属于富文本处理 API 的一部分。
注意:该类中的所有函数均为可重入的。
公共类型
| 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` 的子类而言,这是核心函数,文档内容的布局和定位工作很大一部分都在此完成。
例如,在一个仅负责排列文本块的子类中,该函数的实现需要执行以下操作:
- 利用提供的参数确定已更改的QTextBlock 对象列表。
- 需要处理每个 `QTextBlock ` 对象对应的 `QTextLayout ` 对象。您可以通过 `QTextBlock::layout()` 函数访问 `QTextBlock` 的布局。此处理应考虑文档的页面大小。
- 如果总页数发生变化,应触发pageCountChanged() 信号。
- 如果总大小发生变化,则应发出documentSizeChanged() 信号。
- 应发出update() 信号,以安排对布局中需要重绘的区域进行重绘。
另请参阅 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.