QAbstractTextDocumentLayout 类
QAbstractTextDocumentLayout 类是一个抽象基类,用于实现 QTextDocuments 的自定义布局。 更多...
头文件 | #include <QAbstractTextDocumentLayout> |
CMake | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake | QT += gui |
继承自 | QObject |
被下列类继承 |
- 包括所有继承成员在内的成员列表
- QAbstractTextDocumentLayout 是富文处理 API 的一部分。富文处理 API.
注意:本类中所有函数均可重入。
公共类型
结构体 | PaintContext |
结构体 | 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以为您文本文档提供自定义布局行为。
可以使用setDocumentLayout()函数将QAbstractTextDocumentLayout子类的实例安装到一个QTextDocument对象上。
您可以在一个QTextDocument中插入自定义对象;有关详细信息,请参阅QTextObjectInterface类的描述。
另请参阅QTextObjectInterface。
成员函数文档
[显式]
QAbstractTextDocumentLayout::QAbstractTextDocumentLayout(QTextDocument *document)
为给定的document创建一个新的文本文档布局。
QString QAbstractTextDocumentLayout::anchorAt(const QPointF &position) const
返回给定position的锚点引用,如果该点不存在锚点,则返回空字符串。
[纯虚]
QRectF QAbstractTextDocumentLayout::blockBoundingRect(const QTextBlock &block) const
返回block的边界矩形。
QTextBlock QAbstractTextDocumentLayout::blockWithMarkerAt(const QPointF &pos) const
返回其在给定位置pos具有marker的块(可能是列表项)。
QTextDocument *QAbstractTextDocumentLayout::document() const
返回该布局正在操作的文字文档。
[纯虚受保护]
void QAbstractTextDocumentLayout::documentChanged(int position, int charsRemoved, int charsAdded)
每当文档内容发生变化时都会调用此函数。变化发生在文本插入、删除或这两者的组合时。变化由对应于变化起始字符位置的位置、从文档中删除的字符数charsRemoved和增加的字符数charsAdded来指定。
例如,将文本“Hello”插入到一个空文档中时,charsRemoved将为0,charsAdded将为5(字符串的长度)。
替换文本是删除和插入的组合。例如,如果文本“Hello”被“Hi”替换,charsRemoved将为5,charsAdded将为2。
对于QAbstractTextDocumentLayout的子类,此函数是执行大量布局和位置文档内容的中心函数。
例如,在一个仅排列文本块的子类中,此函数的实现必须执行以下操作
- 使用提供的参数确定已更改的QTextBlock的列表。
- 每个QTextBlock对象对应的QTextLayout对象需要被处理。您可以使用QTextBlock::layout()函数访问QTextBlock的布局。此处理应考虑文档的页面大小。
- 如果页数总数发生变化,应发出pageCountChanged()信号。
- 如果总大小发生变化,应发出documentSizeChanged()信号。
- 应发出update()信号以安排需要重绘的布局区域的重绘。
另请参阅 QTextLayout。
[纯虚函数]
QSizeF QAbstractTextDocumentLayout::documentSize() const
返回文档布局的总大小。
显示小部件可以使用这些信息正确更新它们的滚动条。
另请参阅 documentSizeChanged()和QTextDocument::pageSize。
[信号]
void QAbstractTextDocumentLayout::documentSizeChanged(const QSizeF &newSize)
当文档布局的大小变为newSize时发出此信号。
QAbstractTextDocumentLayout的子类应在文档整个布局大小改变时发出此信号。此信号对显示文本文档的小部件非常有用,因为它使它们能够正确更新它们的滚动条。
另请参阅 documentSize。
[纯虚函数]
void QAbstractTextDocumentLayout::draw(QPainter *painter, const QAbstractTextDocumentLayout::PaintContext &context)
使用指定的painter和context在布局上绘制。
[虚保护函数]
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
返回给定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().
[虚拟受保护]
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
拥有所有权。
[虚拟受保护]
void QAbstractTextDocumentLayout::resizeInlineObject(QTextInlineObject item, int posInDocument, const QTextFormat &format)
设置内联对象 item 的大小,以与文本 format 对应。
posInDocument指定了对象在文档中的位置。
默认实现使用对象处理器的 intrinsicSize() 函数返回的大小来调整 item 的大小。此函数仅在 Qt 中调用。子类可以重新实现此函数以自定义内联对象的调整大小。
void QAbstractTextDocumentLayout::setPaintDevice(QPaintDevice *device)
将用于渲染文档布局的绘图设备设置为给定的 device。
另请参阅paintDevice()。
void QAbstractTextDocumentLayout::unregisterHandler(int objectType, QObject *component = nullptr)
注销给定的 component 作为特定 objectType 项目的处理器,或者如果未指定 component,则注销任何处理器。
[信号]
void QAbstractTextDocumentLayout::update(const QRectF &rect = QRectF(0., 0., 1000000000., 1000000000.))
当矩形 rect 被更新时发出此信号。
QAbstractTextDocumentLayout 的子类应在内容布局更改时发出此信号以重新绘制。
[信号]
void QAbstractTextDocumentLayout::updateBlock(const QTextBlock &block)
指定 block 更新时发出此信号。
QAbstractTextDocumentLayout 的子类应在 block 的布局更改时发出此信号以重新绘制。
© 2024 The Qt Company Ltd. 本文件中包含的文档贡献享有各自的版权。本文件提供的文档根据自由软件基金会的发布的条款,按照GNU自由文档许可证版本1.3进行许可。Qt及其相关标志是芬兰和/或其他国家的The Qt Company Ltd.的商标。所有其他商标均为其各自拥有者的财产。