QTextDocument Class
QTextDocument 类用于存储格式化后的文本。更多内容...
| 头文件: | #include <QTextDocument> |
| CMake: | find_package(Qt6 REQUIRED COMPONENTS Gui) target_link_libraries(mytarget PRIVATE Qt6::Gui) |
| qmake: | QT += gui |
| 继承自: | QObject |
- 所有成员列表(包括继承的成员)
- QTextDocument 属于富文本处理 API 的一部分。
注意:该类中的所有函数均为可重入的。
公共类型
| enum | FindFlag { FindBackward, FindCaseSensitively, FindWholeWords } |
| flags | FindFlags |
| enum | MarkdownFeature { MarkdownNoHTML, MarkdownDialectCommonMark, MarkdownDialectGitHub } |
| flags | MarkdownFeatures |
| enum | MetaInformation { DocumentTitle, DocumentUrl, CssMedia, FrontMatter } |
(since 6.1) | ResourceProvider |
| enum | ResourceType { UnknownResource, HtmlResource, ImageResource, StyleSheetResource, MarkdownResource, UserResource } |
| enum | Stacks { UndoStack, RedoStack, UndoAndRedoStacks } |
属性
|
|
公共函数
| QTextDocument(QObject *parent = nullptr) | |
| QTextDocument(const QString &text, QObject *parent = nullptr) | |
| virtual | ~QTextDocument() |
| void | addResource(int type, const QUrl &name, const QVariant &resource) |
| void | adjustSize() |
| QList<QTextFormat> | allFormats() const |
| int | availableRedoSteps() const |
| int | availableUndoSteps() const |
| QUrl | baseUrl() const |
(since 6.0) qreal | baselineOffset() const |
| QTextBlock | begin() const |
| int | blockCount() const |
| QChar | characterAt(int pos) const |
| int | characterCount() const |
| virtual void | clear() |
| void | clearUndoRedoStacks(QTextDocument::Stacks stacksToClear = UndoAndRedoStacks) |
| QTextDocument * | clone(QObject *parent = nullptr) const |
| Qt::CursorMoveStyle | defaultCursorMoveStyle() const |
| QFont | defaultFont() const |
| QString | defaultStyleSheet() const |
| QTextOption | defaultTextOption() const |
| QAbstractTextDocumentLayout * | documentLayout() const |
| qreal | documentMargin() const |
| void | drawContents(QPainter *p, const QRectF &rect = QRectF()) |
| QTextBlock | end() const |
| QTextCursor | find(const QRegularExpression &expr, const QTextCursor &cursor, QTextDocument::FindFlags options = FindFlags()) const |
| QTextCursor | find(const QRegularExpression &expr, int from = 0, QTextDocument::FindFlags options = FindFlags()) const |
| QTextCursor | find(const QString &subString, const QTextCursor &cursor, QTextDocument::FindFlags options = FindFlags()) const |
| QTextCursor | find(const QString &subString, int position = 0, QTextDocument::FindFlags options = FindFlags()) const |
| QTextBlock | findBlock(int pos) const |
| QTextBlock | findBlockByLineNumber(int lineNumber) const |
| QTextBlock | findBlockByNumber(int blockNumber) const |
| QTextBlock | firstBlock() const |
| qreal | idealWidth() const |
| qreal | indentWidth() const |
| bool | isEmpty() const |
| bool | isLayoutEnabled() const |
| bool | isModified() const |
| bool | isRedoAvailable() const |
| bool | isUndoAvailable() const |
| bool | isUndoRedoEnabled() const |
| QTextBlock | lastBlock() const |
| int | lineCount() const |
| void | markContentsDirty(int position, int length) |
| int | maximumBlockCount() const |
| QString | metaInformation(QTextDocument::MetaInformation info) const |
| QTextObject * | object(int objectIndex) const |
| QTextObject * | objectForFormat(const QTextFormat &f) const |
| int | pageCount() const |
| QSizeF | pageSize() const |
| void | print(QPagedPaintDevice *printer) const |
| void | redo(QTextCursor *cursor) |
| QVariant | resource(int type, const QUrl &name) const |
(since 6.1) QTextDocument::ResourceProvider | resourceProvider() const |
| int | revision() const |
| QTextFrame * | rootFrame() const |
| void | setBaseUrl(const QUrl &url) |
(since 6.0) void | setBaselineOffset(qreal baseline) |
| void | setDefaultCursorMoveStyle(Qt::CursorMoveStyle style) |
| void | setDefaultFont(const QFont &font) |
| void | setDefaultStyleSheet(const QString &sheet) |
| void | setDefaultTextOption(const QTextOption &option) |
| void | setDocumentLayout(QAbstractTextDocumentLayout *layout) |
| void | setDocumentMargin(qreal margin) |
| void | setHtml(const QString &html) |
| void | setIndentWidth(qreal width) |
| void | setLayoutEnabled(bool b) |
| void | setMarkdown(const QString &markdown, QTextDocument::MarkdownFeatures features = MarkdownDialectGitHub) |
| void | setMaximumBlockCount(int maximum) |
| void | setMetaInformation(QTextDocument::MetaInformation info, const QString &string) |
| void | setPageSize(const QSizeF &size) |
| void | setPlainText(const QString &text) |
(since 6.1) void | setResourceProvider(const QTextDocument::ResourceProvider &provider) |
(since 6.0) void | setSubScriptBaseline(qreal baseline) |
(since 6.0) void | setSuperScriptBaseline(qreal baseline) |
| void | setTextWidth(qreal width) |
| void | setUndoRedoEnabled(bool enable) |
| void | setUseDesignMetrics(bool b) |
| QSizeF | size() const |
(since 6.0) qreal | subScriptBaseline() const |
(since 6.0) qreal | superScriptBaseline() const |
| qreal | textWidth() const |
| QString | toHtml() const |
| QString | toMarkdown(QTextDocument::MarkdownFeatures features = MarkdownDialectGitHub) const |
| QString | toPlainText() const |
| QString | toRawText() const |
| void | undo(QTextCursor *cursor) |
| bool | useDesignMetrics() const |
公共槽位
| void | redo() |
| void | setModified(bool m = true) |
| void | undo() |
信号
| void | baseUrlChanged(const QUrl &url) |
| void | blockCountChanged(int newBlockCount) |
| void | contentsChange(int position, int charsRemoved, int charsAdded) |
| void | contentsChanged() |
| void | cursorPositionChanged(const QTextCursor &cursor) |
| void | documentLayoutChanged() |
| void | modificationChanged(bool changed) |
| void | redoAvailable(bool available) |
| void | undoAvailable(bool available) |
| void | undoCommandAdded() |
静态公共成员
(since 6.1) QTextDocument::ResourceProvider | defaultResourceProvider() |
(since 6.1) void | setDefaultResourceProvider(const QTextDocument::ResourceProvider &provider) |
受保护函数
| virtual QTextObject * | createObject(const QTextFormat &format) |
| virtual QVariant | loadResource(int type, const QUrl &name) |
详细说明
QTextDocument 是一个用于存储结构化富文本文档的容器,支持带样式标记的文本以及各种类型的文档元素,例如列表、表格、框架和图像。它们既可以创建用于在QTextEdit 中使用,也可以独立使用。
每个文档元素都由一个关联的格式对象来描述。QTextDocument 将每个格式对象视为一个唯一的对象,并可将其传递给 `objectForFormat()` 以获取其所应用的文档元素。
可以通过QTextCursor 通过编程方式编辑 QTextDocument,并通过遍历文档结构来检查其内容。 整个文档结构以文档元素的层次结构形式存储在根框架之下,可通过rootFrame()函数获取。此外,若仅需遍历文档的文本内容,可使用begin()、end()和findBlock()来获取文本块,以便进行检查和遍历。
文档的布局由documentLayout() 确定;若需使用自定义布局逻辑,可创建自己的QAbstractTextDocumentLayout 子类,并通过setDocumentLayout() 进行设置。 可以通过调用metaInformation()函数获取文档的标题和其他元信息。对于通过QTextEdit 类向用户展示的文档,还可以通过QTextEdit::documentTitle()函数获取文档标题。
toPlainText() 和toHtml() 便捷函数允许您以纯文本和 HTML 格式检索文档内容。可使用find() 函数搜索文档中的文本。
可通过setUndoRedoEnabled() 函数控制对文档执行的操作的撤销/重做。编辑器控件可通过undo() 和redo() 槽来控制撤销/重做系统;文档还提供了contentsChanged()、undoAvailable() 和redoAvailable() 信号,用于向连接的编辑器控件通报撤销/重做系统的状态。 以下是 QTextDocument 的撤销/重做操作:
- 字符的插入或删除。在同一文本块内的一系列插入或删除操作被视为单个撤销/重做操作。
- 文本块的插入或删除。单次操作中的一系列插入或删除(例如,先选择文本再删除)被视为一次撤销/重做操作。
- 文本字符格式的更改。
- 文本块格式的更改。
- 文本块组格式的更改。
另请参阅 QTextCursor 、QTextEdit 以及“富文本处理”。
成员类型文档
enum QTextDocument::FindFlag
flags QTextDocument::FindFlags
此枚举描述了QTextDocument 的find函数可用的选项。可从以下列表中选择多个选项,并以“或”关系组合使用:
| 常量 | 值 | 描述 |
|---|---|---|
QTextDocument::FindBackward | 0x00001 | 向后搜索,而不是向前搜索。 |
QTextDocument::FindCaseSensitively | 0x00002 | 默认情况下,find 操作不区分大小写。指定此选项将行为更改为区分大小写的查找操作。 |
QTextDocument::FindWholeWords | 0x00004 | 使查找仅匹配完整的单词。 |
FindFlags 类型是QFlags<FindFlag> 的 typedef。它存储 FindFlag 值的“或”组合。
enum QTextDocument::MarkdownFeature
flags QTextDocument::MarkdownFeatures
此枚举用于在读取或写入 Markdown 时选择支持的功能集。
| 常量 | 值 | 描述 |
|---|---|---|
QTextDocument::MarkdownNoHTML | 0x0020 | 0x0040 | Markdown 文本中的所有 HTML 标签都将被忽略 |
QTextDocument::MarkdownDialectCommonMark | 0 | 仅支持CommonMark标准化的功能 |
QTextDocument::MarkdownDialectGitHub | 0x0004 | 0x0008 | 0x0400 | 0x0100 | 0x0200 | 0x0800 | 0x4000 | 0x100000 | GitHub 方言中的大部分功能 |
具体而言,所支持的 GitHub 方言子集包含 CommonMark 中的所有内容,此外还包括:
- 识别 URL、www 和电子邮件地址,并将其转换为链接
- 删除线
- 下划线(与斜体不同;在 CommonMark 中二者是相同的)
- 表格
- 任务列表
- front matter
“前置部分”通常是 YAML 格式的元数据。Qt 目前不包含相应的解析器;但您可以选择第三方解析器,调用QTextDocument::metaInformation() 获取整个代码块,并在 Qt 解析完 Markdown 文件后调用您自己的解析器。
注意: 即使您通过指定其他枚举值尝试禁用 GitHub 功能,toMarkdown() 生成的 Markdown输出 目前仍可能包含这些功能。此问题可能会在 Qt 的未来版本中得到修复。
MarkdownFeatures 类型是QFlags<MarkdownFeature> 的 typedef 定义。它存储 MarkdownFeature 值的按“或”运算组合。
另请参阅 toMarkdown() 和setMarkdown()。
enum QTextDocument::MetaInformation
此枚举描述了可添加到文档中的不同类型的元数据。
| 常量 | 值 | 描述 |
|---|---|---|
QTextDocument::DocumentTitle | 0 | 文档的标题。 |
QTextDocument::DocumentUrl | 1 | 文档的 URL。loadResource() 函数在加载相对资源时,会将此 URL 作为基准。 |
QTextDocument::CssMedia | 2 | 当调用setHtml() 时,此值用于从指定的 CSS 样式表中选择相应的 '@media' 规则(如有)。该枚举值在 Qt 6.3 中引入。 |
QTextDocument::FrontMatter | 3 | 该值用于选择页眉素材(如果源文件解析过程中提取了此类素材,目前仅支持从 Markdown 格式中提取)。该枚举值自 Qt 6.8 起引入。 |
另请参阅 metaInformation()、setMetaInformation() 和setHtml()。
[alias, since 6.1] QTextDocument::ResourceProvider
std::function<QVariant(constQUrl&)> 的类型别名。
该类型别名在 Qt 6.1 中引入。
enum QTextDocument::ResourceType
此枚举描述了可由QTextDocument 的loadResource()函数或QTextBrowser::setSource()加载的资源类型。
| 常量 | 常量值 | 描述 |
|---|---|---|
QTextDocument::UnknownResource | 0 | 未加载任何资源,或者资源类型未知。 |
QTextDocument::HtmlResource | 1 | 资源包含 HTML。 |
QTextDocument::ImageResource | 2 | 该资源包含图像数据。目前支持的数据类型为QMetaType::QPixmap 和QMetaType::QImage 。如果相应的变体类型为QMetaType::QByteArray ,则 Qt 会尝试使用QImage::loadFromData 加载图像。目前不支持QMetaType::QIcon 。该图标需要先转换为受支持的类型之一,例如使用QIcon::pixmap 。 |
QTextDocument::StyleSheetResource | 3 | 该资源包含 CSS。 |
QTextDocument::MarkdownResource | 4 | 该资源包含 Markdown。 |
QTextDocument::UserResource | 100 | 用户定义资源类型的第一个可用值。 |
另请参阅 loadResource() 和QTextBrowser::sourceType()。
enum QTextDocument::Stacks
| 常数 | 值 | 描述 |
|---|---|---|
QTextDocument::UndoStack | 0x01 | 撤销堆栈。 |
QTextDocument::RedoStack | 0x02 | 重做堆栈。 |
QTextDocument::UndoAndRedoStacks | UndoStack | RedoStack | 撤销堆栈和重做堆栈。 |
属性文档
baseUrl : QUrl
该属性存储用于解析文档内相对资源 URL 的基准 URL。
资源 URL 将被解析为位于基 URL 目标所在的同一目录下,这意味着路径中最后一个“/”之后的任何部分都将被忽略。
| 基 URL | 相对 URL | 解析后的 URL |
|---|---|---|
| file:///path/to/content | images/logo.png | file:///图片路径/logo.png |
| file:///内容路径/ | images/logo.png | file:///内容路径/images/logo.png |
| file:///内容路径/index.html | images/logo.png | file:///内容路径/images/logo.png |
| file:///内容路径/images/ | ../images/logo.png | file:///内容路径/images/logo.png |
访问函数:
| QUrl | baseUrl() const |
| void | setBaseUrl(const QUrl &url) |
通知器信号:
| void | baseUrlChanged(const QUrl &url) |
[read-only] blockCount : int
该属性存储文档中文本块的数量。
在包含表格或框架的文档中,该属性的值未定义。
默认情况下,如果该属性被定义,其值为 1。
访问函数:
| int | blockCount() const |
另请参阅 lineCount() 和characterCount()。
defaultFont : QFont
此属性存储用于显示文档文本的默认字体
访问函数:
| QFont | defaultFont() const |
| void | setDefaultFont(const QFont &font) |
defaultStyleSheet : QString
默认样式表将应用于插入到文档中的所有新添加的 HTML 格式文本,例如使用setHtml() 或QTextCursor::insertHtml()。
该样式表必须符合 CSS 2.1 语法规范。
注意:更改默认样式表不会对文档中的现有内容产生任何影响。
访问函数:
| QString | defaultStyleSheet() const |
| void | setDefaultStyleSheet(const QString &sheet) |
另请参阅 “支持的 HTML 子集”。
defaultTextOption : QTextOption
此属性用于为文档中的所有QTextLayout设置默认文本选项。
创建QTextBlock时,其QTextLayout 上会设置defaultTextOption属性。这允许为文档设置全局属性,例如默认的换行模式。
访问函数:
| QTextOption | defaultTextOption() const |
| void | setDefaultTextOption(const QTextOption &option) |
documentMargin : qreal
文档周围的边距。默认值为 4。
Access 函数:
| qreal | documentMargin() const |
| void | setDocumentMargin(qreal margin) |
indentWidth : qreal
返回用于文本列表和文本块缩进的宽度。
QTextListFormat 和QTextBlockFormat 的缩进属性指定的是该值的倍数。默认缩进宽度为 40。
访问函数:
| qreal | indentWidth() const |
| void | setIndentWidth(qreal width) |
[since 6.4] layoutEnabled : bool
该属性控制QTextDocument 是否应在每次更改后重新计算布局
如果将此属性设置为 true,文档中的任何更改都会触发版面排版,这虽然能确保一切按预期运行,但会耗费时间。
在进行多项更改时(不仅包括文本内容,还包括默认字体、默认文本选项等),暂时禁用版面排版可以节省时间,这样文档只需在最后进行一次排版。例如,当文本宽度或页面大小尚不明确时,此方法会非常有用。
默认情况下,该属性值为true 。
该枚举类型在 Qt 6.4 中引入。
访问函数:
| bool | isLayoutEnabled() const |
| void | setLayoutEnabled(bool b) |
另请参阅 setTextWidth 。
maximumBlockCount : int
指定文档中块的上限。
指定文档中允许包含的块的最大数量。如果文档中的块数量超过此属性指定的数量,则会从文档开头移除多余的块。
负值或零值表示文档中可以包含无限数量的块。
默认值为 0。
请注意,设置此属性后,限制将立即应用于文档内容。
设置此属性还会禁用“撤销/重做”历史记录。
在包含表格或框架的文档中,此属性未定义。
访问函数:
| int | maximumBlockCount() const |
| void | setMaximumBlockCount(int maximum) |
modified : bool
该属性表示文档是否已被用户修改
默认情况下,该属性的值为false 。
访问函数:
| bool | isModified() const |
| void | setModified(bool m = true) |
另请参阅 modificationChanged()。
pageSize : QSizeF
该属性存储用于文档排版的页面尺寸
单位由底层绘制设备决定。在屏幕上绘制时,尺寸以逻辑像素为单位;在打印机上绘制时,则以点(1/72英寸)为单位。
默认情况下,对于新创建的空白文档,该属性包含未定义的尺寸。
访问函数:
| QSizeF | pageSize() const |
| void | setPageSize(const QSizeF &size) |
另请参阅 modificationChanged()。
[read-only] size : QSizeF
该属性存储文档的实际大小。这等同于documentLayout()->documentSize();
可以通过设置文本宽度或设置整个页面尺寸来更改文档的大小。
请注意,宽度始终大于等于 `pageSize()`.width()。
默认情况下,对于新创建的空文档,该属性包含一个取决于配置的大小值。
访问函数:
| QSizeF | size() const |
另请参阅 setTextWidth()、setPageSize() 和idealWidth()。
textWidth : qreal
文本宽度指定了文档中文本的首选宽度。如果文本(或一般内容)的宽度超过指定宽度,则会换行并沿垂直方向扩展。如果无法通过换行使文本适应指定的文本宽度,则文本会变大,且size()和idealWidth()属性将反映这一变化。
如果文本宽度设置为 -1,则文本不会被换行,除非通过显式换行符或新段落强制换行。
默认值为 -1。
设置文本宽度也会将页面高度设置为 -1,导致文档在垂直方向上连续地扩大或缩小。如果您希望文档布局将文本拆分为多页,则必须设置pageSize 属性。
访问函数:
| qreal | textWidth() const |
| void | setTextWidth(qreal width) |
另请参阅 size()、idealWidth() 和pageSize()。
undoRedoEnabled : bool
该属性用于指定此文档是否启用了“撤销/重做”功能
默认值为 true。如果禁用,则撤销堆栈将被清空,且不会向其中添加任何项目。
访问函数:
| bool | isUndoRedoEnabled() const |
| void | setUndoRedoEnabled(bool enable) |
useDesignMetrics : bool
该属性控制文档是否使用字体的设计度量值来提高文本布局的精度
如果此属性设置为 true,布局将使用设计度量。否则,将使用通过QAbstractTextDocumentLayout::setPaintDevice() 设置的绘制设备度量。
使用设计度量后,布局的宽度将不再依赖于提示和像素舍入。这意味着可以实现所见即所得(WYSIWYG)的文本布局,因为基于绘图设备度量计算的宽度缩放要比其他情况更趋近于线性。
默认情况下,此属性为false 。
访问函数:
| bool | useDesignMetrics() const |
| void | setUseDesignMetrics(bool b) |
成员函数文档
[explicit] QTextDocument::QTextDocument(QObject *parent = nullptr)
使用给定的parent 创建一个空的QTextDocument。
[explicit] QTextDocument::QTextDocument(const QString &text, QObject *parent = nullptr)
创建一个 QTextDocument 对象,其中包含指定的纯文本(未格式化)text ,并应用给定的parent 。
[virtual noexcept] QTextDocument::~QTextDocument()
销毁该文件。
void QTextDocument::addResource(int type, const QUrl &name, const QVariant &resource)
将资源resource 添加到资源缓存中,并使用type 和name 作为标识符。type 应为QTextDocument::ResourceType 中列出的值之一。
例如,您可以将一张图片作为资源添加,以便在文档内部引用它:
document->addResource(QTextDocument::ImageResource,
QUrl("mydata://image.png"), QVariant(image));可以使用QTextCursor API 将图片插入文档:
QTextImageFormat imageFormat;
imageFormat.setName("mydata://image.png");
cursor.insertImage(imageFormat);此外,您还可以使用 HTMLimg 标签插入图片:
editor->append("<img src=\"mydata://image.png\" />");void QTextDocument::adjustSize()
将文档调整为合理大小。
另请参阅 idealWidth(),textWidth 以及size 。
QList<QTextFormat> QTextDocument::allFormats() const
返回一个文本格式列表,其中包含文档中使用过的所有格式。
int QTextDocument::availableRedoSteps() const
返回可用的重做步骤数。
另请参阅 isRedoAvailable()。
int QTextDocument::availableUndoSteps() const
返回可用的撤销步骤数量。
另请参阅 isUndoAvailable()。
[since 6.0] qreal QTextDocument::baselineOffset() const
返回文档布局中使用的基线偏移量(以百分比为单位)。
该函数于 Qt 6.0 中引入。
另请参阅 setBaselineOffset()、setSubScriptBaseline()、subScriptBaseline()、setSuperScriptBaseline() 以及superScriptBaseline()。
QTextBlock QTextDocument::begin() const
返回文档中的第一个文本块。
另请参阅 ` firstBlock()`。
[signal] void QTextDocument::blockCountChanged(int newBlockCount)
当文档中的文本块总数发生变化时,会触发此信号。传递给newBlockCount 的值即为新的总数。
QChar QTextDocument::characterAt(int pos) const
返回位于位置pos 处的字符;如果位置超出范围,则返回空字符。
另请参阅 characterCount()。
int QTextDocument::characterCount() const
返回该文档的字符数。
注意:由于 QTextDocument 始终至少包含一个QChar::ParagraphSeparator ,因此 该方法返回的值至少为1。
另请参阅 blockCount() 和characterAt()。
[virtual] void QTextDocument::clear()
清除文档内容。
void QTextDocument::clearUndoRedoStacks(QTextDocument::Stacks stacksToClear = UndoAndRedoStacks)
清除由stacksToClear 指定的堆栈。
此方法将清除撤销堆栈、重做堆栈或两者(默认)中的所有命令。如果清除了命令,则会发出相应的信号:QTextDocument::undoAvailable() 或QTextDocument::redoAvailable()。
另请参阅 QTextDocument::undoAvailable() 和QTextDocument::redoAvailable()。
QTextDocument *QTextDocument::clone(QObject *parent = nullptr) const
创建一个新的QTextDocument ,该文档是此文本文档的副本。parent 是返回的文本文档的父文档。
[signal] void QTextDocument::contentsChange(int position, int charsRemoved, int charsAdded)
每当文档内容发生变化时,都会发出此信号;例如,插入或删除文本时,或者应用格式时。
该信号会提供有关文档中发生更改的字符的position 、删除的字符数(charsRemoved )以及添加的字符数(charsAdded )的信息。
该信号在文档的布局管理器收到变更通知之前触发。此钩子允许您为文档实现语法高亮功能。
另请参阅 QAbstractTextDocumentLayout::documentChanged() 和contentsChanged()。
[signal] void QTextDocument::contentsChanged()
每当文档内容发生变化时,都会触发此信号;例如,插入或删除文本时,或者应用格式时。
另请参阅 contentsChange()。
[virtual protected] QTextObject *QTextDocument::createObject(const QTextFormat &format)
根据给定的format 创建并返回一个新的文档对象(QTextObject )。
QTextObjects 总是通过此方法创建的,因此,如果您在文档中使用了自定义文本对象,则必须重写此方法。
[signal] void QTextDocument::cursorPositionChanged(const QTextCursor &cursor)
每当光标因编辑操作而发生位置变化时,都会触发此信号。发生变化的光标会作为参数传递给cursor 。如果文档与QTextEdit 类配合使用,且您需要在光标通过方向键移动时收到信号,可以使用QTextEdit 中的cursorPositionChanged()信号。
Qt::CursorMoveStyle QTextDocument::defaultCursorMoveStyle() const
所有从文档创建的QTextCursor 对象均使用默认的光标移动样式。默认设置为Qt::LogicalMoveStyle 。
另请参阅 setDefaultCursorMoveStyle()。
QFont QTextDocument::defaultFont() const
返回文档排版中要使用的默认字体。
注意: 这是 defaultFont 属性的获取 函数。
另请参阅 ` setDefaultFont()`。
[static, since 6.1] QTextDocument::ResourceProvider QTextDocument::defaultResourceProvider()
返回默认资源提供程序。
该函数在 Qt 6.1 中引入。
另请参阅 setDefaultResourceProvider()、resourceProvider() 和loadResource()。
QTextOption QTextDocument::defaultTextOption() const
默认文本选项适用于文档中的所有QTextLayout 对象。这允许为文档设置全局属性,例如默认的自动换行模式。
注意: 这是属性 defaultTextOption 的获取 函数。
另请参阅 setDefaultTextOption()。
QAbstractTextDocumentLayout *QTextDocument::documentLayout() const
返回该文档的布局。
另请参阅 setDocumentLayout()。
[signal] void QTextDocument::documentLayoutChanged()
当设置新的文档布局时,会发出此信号。
另请参阅 setDocumentLayout()。
void QTextDocument::drawContents(QPainter *p, const QRectF &rect = QRectF())
使用绘图器p 绘制文档内容,并裁剪至rect 。如果rect 为空矩形(默认),则文档将不进行裁剪地绘制。
QTextBlock QTextDocument::end() const
该函数返回一个块,用于在遍历文档时检测文档结尾。
for (QTextBlock it = doc->begin(); it != doc->end(); it = it.next())
std::cout << it.text().toStdString() << "\n";返回的代码块无效,它代表文档中最后一个代码块之后的代码块。您可以使用 `lastBlock()` 来获取文档中的最后一个有效代码块。
另请参阅 lastBlock()。
QTextCursor QTextDocument::find(const QRegularExpression &expr, const QTextCursor &cursor, QTextDocument::FindFlags options = FindFlags()) const
在文档的同一段落中查找下一个与给定正则表达式expr 匹配的出现位置。
搜索从给定的cursor 的位置开始,并沿文档向前进行,除非在搜索选项中另有指定。options 控制执行的搜索类型。
如果找到匹配项,则返回一个选中该匹配项的光标;否则返回一个空光标。
如果给定的cursor 有选区,则搜索从选区之后开始;否则从光标位置开始。
默认情况下,搜索不区分大小写,并且可以匹配文档中任何位置的文本。
QTextCursor QTextDocument::find(const QRegularExpression &expr, int from = 0, QTextDocument::FindFlags options = FindFlags()) const
在文档的同一段落中查找下一个与给定正则表达式expr 匹配的出现位置。
搜索从给定的from 位置开始,并沿文档向前进行,除非在搜索选项中另有指定。options 控制执行的搜索类型。
如果找到了匹配项,则返回一个已选中匹配项的光标;否则返回一个空光标。
如果from 位置为0(默认值),则从文档开头开始搜索;否则从指定位置开始。
警告:出于 历史原因,expr 上设置的大小写敏感选项将被忽略。取而代之的是,将使用options 来确定搜索是否区分大小写。
QTextCursor QTextDocument::find(const QString &subString, const QTextCursor &cursor, QTextDocument::FindFlags options = FindFlags()) const
在文档中查找字符串subString 的下一次出现位置。搜索从给定的cursor 位置开始,并按文档顺序向前进行,除非在搜索选项中另有指定。options 控制执行的搜索类型。
如果找到了subString ,则返回一个选中匹配内容的光标;否则返回一个空光标。
如果给定的cursor 有选定内容,则从选定内容之后开始搜索;否则从光标位置开始搜索。
默认情况下,搜索不区分大小写,并且可以匹配文档中任何位置的文本。
QTextCursor QTextDocument::find(const QString &subString, int position = 0, QTextDocument::FindFlags options = FindFlags()) const
在文档中查找字符串subString 的下一次出现位置。搜索从给定的position 位置开始,并按文档顺序向前进行,除非在搜索选项中另有指定。options 控制执行的搜索类型。
如果找到了subString ,则返回一个已选中匹配结果的光标;否则返回一个空光标。
如果position 为 0(默认值),则搜索从文档开头开始;否则从指定位置开始。
这是一个重载函数。
QTextBlock QTextDocument::findBlock(int pos) const
返回包含pos 第-个字符的文本块。
QTextBlock QTextDocument::findBlockByLineNumber(int lineNumber) const
返回包含指定lineNumber 的文本块。
另请参阅 QTextBlock::firstLineNumber()。
QTextBlock QTextDocument::findBlockByNumber(int blockNumber) const
返回带有指定blockNumber 的文本块。
另请参阅 QTextBlock::blockNumber()。
QTextBlock QTextDocument::firstBlock() const
返回文档中的第一个文本块。
qreal QTextDocument::idealWidth() const
返回文本文档的理想宽度。理想宽度是指不考虑可选对齐方式时,文档实际占用的宽度。该值始终小于或等于size().width()。
另请参阅 adjustSize() 和textWidth 。
bool QTextDocument::isEmpty() const
如果文档为空,则返回true ;否则返回false 。
bool QTextDocument::isRedoAvailable() const
如果可重做,则返回true ;否则返回false 。
另请参阅 isUndoAvailable() 和availableRedoSteps()。
bool QTextDocument::isUndoAvailable() const
如果支持撤销,则返回true ;否则返回false 。
另请参阅 isRedoAvailable() 和availableUndoSteps()。
QTextBlock QTextDocument::lastBlock() const
返回文档的最后一个(有效的)文本块。
int QTextDocument::lineCount() const
返回该文档的行数(如果布局支持此功能)。否则,该值与块的数量相同。
另请参阅 blockCount() 和characterCount()。
[virtual protected invokable] QVariant QTextDocument::loadResource(int type, const QUrl &name)
从指定资源(name )中加载指定type 的数据。
该函数由富文本引擎调用,用于请求那些虽未直接存储在QTextDocument 中,但仍与其相关的数据。例如,图像是通过QTextImageFormat 对象的name属性间接引用的。
当由 Qt XML 调用时,type 是QTextDocument::ResourceType 的值之一。
如果 `QTextDocument ` 是某个 `QObject ` 的子对象,且该 ` ` 具有可调用的 `loadResource` 方法(例如 `QTextEdit`、`QTextBrowser ` 或 `QTextDocument ` 本身),则默认实现会尝试从父对象中检索数据。
注意:该 函数可通过元对象系统以及从 QML 中调用。参见Q_INVOKABLE 。
另请参阅 QTextDocument::ResourceProvider 。
void QTextDocument::markContentsDirty(int position, int length)
将由给定的position 和length 指定的内容标记为“已修改”,以此通知文档需要重新排版。
QString QTextDocument::metaInformation(QTextDocument::MetaInformation info) const
返回由info 指定的类型文档的相关元数据。
另请参阅 setMetaInformation()。
[signal] void QTextDocument::modificationChanged(bool changed)
每当文档内容发生变化且该变化影响修改状态时,都会触发此信号。如果 `changed ` 为真,则表示文档已被修改;否则为假。
例如,对文档调用setModified(false) 之后插入文本,会触发该信号。若撤销该操作,使文档恢复到原始未修改状态,该信号将再次被触发。
QTextObject *QTextDocument::object(int objectIndex) const
返回与给定的objectIndex 关联的文本对象。
QTextObject *QTextDocument::objectForFormat(const QTextFormat &f) const
返回与格式f 关联的文本对象。
int QTextDocument::pageCount() const
返回该文档的页数。
void QTextDocument::print(QPagedPaintDevice *printer) const
将文档打印到指定的printer 上。在使用此函数之前,必须先配置好QPagedPaintDevice 。
这仅是一个用于将整个文档打印到打印机的便捷方法。
如果文档已通过pageSize()属性按指定高度分页,则按原样打印。
如果文档未分页(例如在QTextEdit 中使用的文档),则会创建文档的临时副本,并根据绘图设备的 paperRect() 大小将副本分成多页。默认情况下,文档内容周围设置了 2 厘米的边距。 此外,每页底部都会打印当前页码。
另请参阅 QTextEdit::print()。
void QTextDocument::redo(QTextCursor *cursor)
如果redo is available ,则对文档重新执行上一次编辑操作。
所提供的cursor 将定位在重做编辑操作所在位置的末尾。
[slot] void QTextDocument::redo()
如果redo is available ,则重新执行对文档的最后一次编辑操作。
注意:此 插槽已被重载。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
textDocument, qOverload<>(&QTextDocument::redo));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
textDocument, [receiver = textDocument]() { receiver->redo(); });[signal] void QTextDocument::redoAvailable(bool available)
每当重做操作可用(available 为真)或不可用(available 为假)时,都会触发此信号。
QVariant QTextDocument::resource(int type, const QUrl &name) const
从具有给定name 的资源中返回指定type 的数据。
该函数由富文本引擎调用,用于请求那些虽未直接存储在QTextDocument 中,但与其相关的数据。例如,图像是通过QTextImageFormat 对象的name属性间接引用的。
资源会在文档内部进行缓存。如果缓存中找不到某个资源,则会调用loadResource 尝试加载该资源。随后,loadResource 应使用addResource 将该资源添加到缓存中。
如果loadResource 未能加载该资源,则将依次调用resourceProvider ,最后(若已设置)调用defaultResourceProvider 。请注意,提供程序返回的结果不会自动添加到缓存中。
另请参阅 QTextDocument::ResourceType 和resourceProvider()。
[since 6.1] QTextDocument::ResourceProvider QTextDocument::resourceProvider() const
返回此文本文档的资源提供程序。
该函数在 Qt 6.1 中引入。
另请参阅 setResourceProvider()、defaultResourceProvider() 和loadResource()。
int QTextDocument::revision() const
返回文档的修订版本(如果启用了“撤销”功能)。
当编辑未被修改的文档时,修订号保证会递增。
另请参阅 QTextBlock::revision() 和isModified()。
QTextFrame *QTextDocument::rootFrame() const
返回文档的根框架。
[since 6.0] void QTextDocument::setBaselineOffset(qreal baseline)
将基线设置为字体高度的百分比,用于文档排版,其范围为baseline 。默认值为 0。正值会将文本向上移动相应百分比的距离;负值则会将其向下移动。
该函数在 Qt 6.0 中引入。
另请参阅 baselineOffset()、setSubScriptBaseline()、subScriptBaseline()、setSuperScriptBaseline() 以及superScriptBaseline()。
void QTextDocument::setDefaultCursorMoveStyle(Qt::CursorMoveStyle style)
将默认光标移动样式设置为指定的style 。
另请参阅 defaultCursorMoveStyle()。
void QTextDocument::setDefaultFont(const QFont &font)
设置文档布局中要使用的默认font 。
注意: 属性defaultFont 的设置 函数。
另请参阅 defaultFont()。
[static, since 6.1] void QTextDocument::setDefaultResourceProvider(const QTextDocument::ResourceProvider &provider)
将默认资源提供程序设置为provider 。
所有未显式设置资源提供程序的 QTextDocument 对象都将使用该默认提供程序。
该函数在 Qt 6.1 中引入。
另请参阅 defaultResourceProvider()、setResourceProvider() 和loadResource()。
void QTextDocument::setDefaultTextOption(const QTextOption &option)
将默认文本选项设置为option 。
注意: 这是属性 `defaultTextOption`的设置 函数。
另请参阅 defaultTextOption()。
void QTextDocument::setDocumentLayout(QAbstractTextDocumentLayout *layout)
将文档设置为使用指定的layout 。之前的布局将被删除。
另请参阅 documentLayoutChanged()。
void QTextDocument::setHtml(const QString &html)
将文档的全部内容替换为html 字符串中给定的HTML格式文本。调用此函数时,撤销/重做历史记录将被重置。
HTML 格式将尽可能得到保留;例如,"<b>bold</b> text" 将生成这样的文本:第一个单词的字体粗细使其呈现为粗体:"boldtext"。
若要选择默认“screen”规则以外的 CSS 媒体规则,请在调用setMetaInformation() 时将“info”参数设为 'CssMedia'。
注意: 当创建包含 HTML 的QString 并将其传递给 setHtml() 时,确保文本被正确解码是 调用方的责任。
另请参阅 setPlainText()、支持的 HTML 子集 以及setMetaInformation()。
void QTextDocument::setIndentWidth(qreal width)
设置用于文本列表和文本块缩进的width 。
QTextListFormat 和QTextBlockFormat 的缩进属性指定的是该值的倍数。默认缩进宽度为 40。
注意: 属性indentWidth 的设置 函数。
另请参阅 indentWidth()。
void QTextDocument::setMarkdown(const QString &markdown, QTextDocument::MarkdownFeatures features = MarkdownDialectGitHub)
将文档的全部内容替换为markdown 字符串中给定的Markdown格式文本,并支持给定的features 。默认情况下,包含所有受支持的GitHub风格Markdown功能;若需更基础的解析,请传入MarkdownDialectCommonMark 。
将尽可能保留 Markdown 格式;例如,“*粗体* 文本”将生成第一个单词字重增强、呈现强调效果的文本。
对markdown 字符串中包含的 HTML 的解析方式与setHtml 中的处理方式相同;但 HTML 块内的 Markdown 格式不被支持。
解析器的某些功能可通过features 参数启用或禁用。默认值为MarkdownDialectGitHub 。
调用此函数时,撤销/重做历史记录将被重置。
void QTextDocument::setMetaInformation(QTextDocument::MetaInformation info, const QString &string)
将文档中由info 指定的类型元数据设置为给定的string 。
另请参阅 metaInformation()。
void QTextDocument::setPlainText(const QString &text)
将文档的全部内容替换为给定的纯文本text 。调用此函数时,撤销/重做历史记录将被重置。
另请参阅 setHtml()。
[since 6.1] void QTextDocument::setResourceProvider(const QTextDocument::ResourceProvider &provider)
将文本文档的资源提供程序设置为provider 。
该函数自 Qt 6.1 起引入。
另请参阅 resourceProvider() 和loadResource()。
[since 6.0] void QTextDocument::setSubScriptBaseline(qreal baseline)
将默认下标的基线设置为字体高度的百分比,该值将在文档排版中用于baseline 。默认值为16.67%(高度的1/6)。
该函数在 Qt 6.0 中引入。
另请参阅 subScriptBaseline()、setSuperScriptBaseline()、superScriptBaseline()、setBaselineOffset() 和baselineOffset()。
[since 6.0] void QTextDocument::setSuperScriptBaseline(qreal baseline)
将默认上标的基线设置为字体高度的百分比,该值将在文档排版中作为baseline 使用。默认值为50%(即高度的1/2)。
该函数在 Qt 6.0 中引入。
另请参阅 superScriptBaseline()、setSubScriptBaseline()、subScriptBaseline()、setBaselineOffset() 以及baselineOffset()。
[since 6.0] qreal QTextDocument::subScriptBaseline() const
返回上标基线高度占文档布局中字体高度的百分比。
该函数在 Qt 6.0 中引入。
另请参阅 setSubScriptBaseline()、setSuperScriptBaseline()、superScriptBaseline()、setBaselineOffset() 和baselineOffset()。
[since 6.0] qreal QTextDocument::superScriptBaseline() const
返回上标基线高度占文档布局中字体高度的百分比。
该函数在 Qt 6.0 中引入。
另请参阅 setSuperScriptBaseline()、setSubScriptBaseline()、subScriptBaseline()、setBaselineOffset() 以及baselineOffset()。
QString QTextDocument::toHtml() const
返回一个包含该文档 HTML 表示形式的字符串。
文档内容指定其编码为 UTF-8。如果您稍后需要将返回的 HTML 字符串转换为字节数组以便通过网络传输或保存到磁盘,应使用 `QString::toUtf8()` 将字符串转换为 `QByteArray`。
另请参阅 “支持的 HTML 子集”。
QString QTextDocument::toMarkdown(QTextDocument::MarkdownFeatures features = MarkdownDialectGitHub) const
返回一个字符串,其中包含使用给定的features 格式化后的文档的Markdown表示形式;如果因任何原因写入失败,则返回空字符串。
另请参阅 setMarkdown 。
QString QTextDocument::toPlainText() const
返回文档中包含的纯文本。如果需要格式信息,请改用QTextCursor 函数。
此函数的返回结果与 `toRawText()` 相同,但会将某些 Unicode 字符替换为 ASCII 对应字符。 具体而言,不换行空格(U+00A0)将被替换为普通空格(U+0020),段落分隔符(U+2029)和行分隔符(U+2028)均将被替换为换行符(U+000A)。 如果您需要文档的精确内容,请改用toRawText()。
注意:嵌入 对象(如图像)由 Unicode 值 U+FFFC(对象替换字符)表示。
另请参阅 toHtml()。
QString QTextDocument::toRawText() const
返回文档中包含的原始文本,不包含任何格式信息。如果需要格式信息,请改用QTextCursor 。
另请参阅 toPlainText()。
void QTextDocument::undo(QTextCursor *cursor)
如果支持撤销功能,则撤销文档上的上一次编辑操作。提供的cursor 将定位在被撤销的编辑操作结束的位置。
详情请参阅Qt 撤销框架文档。
另请参阅 undoAvailable() 和isUndoRedoEnabled()。
[slot] void QTextDocument::undo()
注意:此 插槽已被重载。要连接到此插槽:
// Connect using qOverload:
connect(sender, &SenderClass::signal,
textDocument, qOverload<>(&QTextDocument::undo));
// Or using a lambda as wrapper:
connect(sender, &SenderClass::signal,
textDocument, [receiver = textDocument]() { receiver->undo(); });[signal] void QTextDocument::undoAvailable(bool available)
每当撤销操作可用(available 为 true)或不可用(available 为 false)时,都会发出此信号。
详情请参阅Qt 撤销框架文档。
另请参阅 undo() 和isUndoRedoEnabled()。
[signal] void QTextDocument::undoCommandAdded()
每当向QTextDocument 添加一个新的撤销级别时,都会发出此信号。
© 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.