QAbstractTextDocumentLayout Class
QAbstractTextDocumentLayout 类是一个抽象基类,用于实现 QTextDocuments 的自定义布局。更多
Header: | #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
Returns the block (probably a list item) whosemarker is found at the given positionpos 。
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(s) 列表。
- 需要处理每个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 的子类应在文档的整个布局尺寸发生变化时发出该信号。此信号对显示文本文档的 widget 非常有用,因为它能使这些 widget 正确更新滚动条。
另请参阅 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)
调用此函数将在rect 指定的矩形内使用指定的文本format 绘制内联对象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
使用指定的accuracy 返回给定point 的光标位置。如果没有找到有效的光标位置,则返回-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 已更新时,将发出该信号。
QAbstractTextDocumentLayout 的子类应在block 的布局发生变化时发出此信号,以便重新绘制。
© 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.