QTextCursor 类提供访问和修改 QTextDocument 的 API。 更多...
头: | #include <QTextCursor> |
CMake: |
find_package(Qt6 REQUIRED COMPONENTS Gui)
target_link_libraries(mytarget PRIVATE Qt6::Gui) |
qmake: | QT += gui |
注意: 此类的所有函数 可重入 .
enum | MoveMode { MoveAnchor, KeepAnchor } |
enum | MoveOperation { NoMove, Start, StartOfLine, StartOfBlock, StartOfWord, …, PreviousRow } |
enum | SelectionType { Document, BlockUnderCursor, LineUnderCursor, WordUnderCursor } |
QTextCursor () | |
QTextCursor (QTextDocument * document ) | |
QTextCursor (QTextFrame * frame ) | |
QTextCursor (const QTextBlock & block ) | |
QTextCursor (const QTextCursor & cursor ) | |
~QTextCursor () | |
int | anchor () const |
bool | atBlockEnd () const |
bool | atBlockStart () const |
bool | atEnd () const |
bool | atStart () const |
void | beginEditBlock () |
QTextBlock | block () const |
QTextCharFormat | blockCharFormat () const |
QTextBlockFormat | blockFormat () const |
int | blockNumber () const |
QTextCharFormat | charFormat () const |
void | clearSelection () |
int | columnNumber () const |
QTextList * | createList (const QTextListFormat & format ) |
QTextList * | createList (QTextListFormat::Style style ) |
QTextFrame * | currentFrame () const |
QTextList * | currentList () const |
QTextTable * | currentTable () const |
void | deleteChar () |
void | deletePreviousChar () |
QTextDocument * | document () const |
void | endEditBlock () |
bool | hasComplexSelection () const |
bool | hasSelection () const |
void | insertBlock () |
void | insertBlock (const QTextBlockFormat & format ) |
void | insertBlock (const QTextBlockFormat & format , const QTextCharFormat & charFormat ) |
void | insertFragment (const QTextDocumentFragment & fragment ) |
QTextFrame * | insertFrame (const QTextFrameFormat & format ) |
void | insertHtml (const QString & html ) |
void | insertImage (const QTextImageFormat & format ) |
void | insertImage (const QTextImageFormat & format , QTextFrameFormat::Position alignment ) |
void | insertImage (const QString & name ) |
void | insertImage (const QImage & image , const QString & name = QString()) |
QTextList * | insertList (const QTextListFormat & format ) |
QTextList * | insertList (QTextListFormat::Style style ) |
void | insertMarkdown (const QString & markdown , QTextDocument::MarkdownFeatures features = QTextDocument::MarkdownDialectGitHub) |
QTextTable * | insertTable (int rows , int columns , const QTextTableFormat & format ) |
QTextTable * | insertTable (int rows , int columns ) |
void | insertText (const QString & text ) |
void | insertText (const QString & text , const QTextCharFormat & format ) |
bool | isCopyOf (const QTextCursor & other ) const |
bool | isNull () const |
void | joinPreviousEditBlock () |
bool | keepPositionOnInsert () const |
void | mergeBlockCharFormat (const QTextCharFormat & modifier ) |
void | mergeBlockFormat (const QTextBlockFormat & modifier ) |
void | mergeCharFormat (const QTextCharFormat & modifier ) |
bool | movePosition (QTextCursor::MoveOperation operation , QTextCursor::MoveMode mode = MoveAnchor, int n = 1) |
int | position () const |
int | positionInBlock () const |
void | removeSelectedText () |
void | select (QTextCursor::SelectionType selection ) |
void | selectedTableCells (int * firstRow , int * numRows , int * firstColumn , int * numColumns ) const |
QString | selectedText () const |
QTextDocumentFragment | selection () const |
int | selectionEnd () const |
int | selectionStart () const |
void | setBlockCharFormat (const QTextCharFormat & format ) |
void | setBlockFormat (const QTextBlockFormat & format ) |
void | setCharFormat (const QTextCharFormat & format ) |
void | setKeepPositionOnInsert (bool b ) |
void | setPosition (int pos , QTextCursor::MoveMode m = MoveAnchor) |
void | setVerticalMovementX (int x ) |
void | setVisualNavigation (bool b ) |
void | swap (QTextCursor & other ) |
int | verticalMovementX () const |
bool | visualNavigation () const |
bool | operator!= (const QTextCursor & other ) const |
bool | operator< (const QTextCursor & other ) const |
bool | operator<= (const QTextCursor & other ) const |
QTextCursor & | operator= (const QTextCursor & cursor ) |
bool | operator== (const QTextCursor & other ) const |
bool | operator> (const QTextCursor & other ) const |
bool | operator>= (const QTextCursor & other ) const |
文本光标是用于访问和修改文本文档内容和底层结构的对象,凭借模仿文本编辑器光标行为的编程接口。QTextCursor 包含的信息有关光标位置在 QTextDocument 和它所做的任何选择。
QTextCursor 基于文本光标在文本编辑器中的行为建模,提供透过用户界面履行标准动作的编程方式。可以认为文档是单个字符串。光标的当前 position () 则始终要么 between 2 连续字符在字符串中,要么否则 before 恰好第一字符或 after the very last character in the string. Documents can also contain tables, lists, images, and other objects in addition to text but, from the developer's point of view, the document can be treated as one long string. Some portions of that string can be considered to lie within particular blocks (e.g. paragraphs), or within a table's cell, or a list's item, or other structural elements. When we refer to "current character" we mean the character immediately before the cursor position () in the document. Similarly, the "current block" is the block that contains the cursor position ().
QTextCursor 还有 anchor () 位置。文本介于 anchor () 和 position () 是选定。若 anchor () == position (),没有选定。
可以按编程方式改变光标位置使用 setPosition () 和 movePosition ();后者还可用于选定文本。对于选定见 selectionStart (), selectionEnd (), hasSelection (), clearSelection (),和 removeSelectedText ().
若
position
() 位于块开头,
atBlockStart
() 返回
true
;和若它位于块末尾,
atBlockEnd
() 返回 true。当前字符格式的返回通过
charFormat
(),和当前块格式的返回通过
blockFormat
().
可以将格式化应用到当前文本文档使用 setCharFormat (), mergeCharFormat (), setBlockFormat () 和 mergeBlockFormat () functions. The 'set' functions will replace the cursor's current character or block format, while the 'merge' functions add the given format properties to the cursor's current format. If the cursor has a selection, the given format is applied to the current selection. Note that when only a part of a block is selected, the block format is applied to the entire block. The text at the current character position can be turned into a list using createList ().
删除可以达成使用 deleteChar (), deletePreviousChar (),和 removeSelectedText ().
Text strings can be inserted into the document with the insertText () function, blocks (representing new paragraphs) can be inserted with insertBlock ().
Existing fragments of text can be inserted with insertFragment () but, if you want to insert pieces of text in various formats, it is usually still easier to use insertText () and supply a character format.
Various types of higher-level structure can also be inserted into the document with the cursor:
Actions can be grouped (i.e. treated as a single action for undo/redo) using beginEditBlock () 和 endEditBlock ().
Cursor movements are limited to valid cursor positions. In Latin writing this is between any two consecutive characters in the text, before the first character, or after the last character. In some other writing systems cursor movements are limited to "clusters" (e.g. a syllable in Devanagari, or a base letter plus diacritics). Functions such as movePosition () 和 deleteChar () limit cursor movement to these valid positions.
另请参阅 富文本处理 .
常量 | 值 | 描述 |
---|---|---|
QTextCursor::MoveAnchor
|
0
|
将锚点移到如光标自身的相同位置。 |
QTextCursor::KeepAnchor
|
1
|
保持锚点位置。 |
若 anchor () 保持位置且 position () 被移动,会选中之间文本。
常量 | 值 | 描述 |
---|---|---|
QTextCursor::NoMove
|
0
|
保持光标位置 |
QTextCursor::Start
|
1
|
移至文档开头。 |
QTextCursor::StartOfLine
|
3
|
移至当前行开头。 |
QTextCursor::StartOfBlock
|
4
|
移至当前块开头。 |
QTextCursor::StartOfWord
|
5
|
移至当前单词开头。 |
QTextCursor::PreviousBlock
|
6
|
移至先前块开头。 |
QTextCursor::PreviousCharacter
|
7
|
移至上一字符。 |
QTextCursor::PreviousWord
|
8
|
移至先前单词开头。 |
QTextCursor::Up
|
2
|
上移一行。 |
QTextCursor::Left
|
9
|
左移一字符。 |
QTextCursor::WordLeft
|
10
|
左移一单词。 |
QTextCursor::End
|
11
|
移至文档末尾。 |
QTextCursor::EndOfLine
|
13
|
移至当前行末尾。 |
QTextCursor::EndOfWord
|
14
|
移至当前单词末尾。 |
QTextCursor::EndOfBlock
|
15
|
移至当前块末尾。 |
QTextCursor::NextBlock
|
16
|
移至下一块起始。 |
QTextCursor::NextCharacter
|
17
|
移至下一字符。 |
QTextCursor::NextWord
|
18
|
移至下一单词。 |
QTextCursor::Down
|
12
|
下移一行。 |
QTextCursor::Right
|
19
|
右移一字符。 |
QTextCursor::WordRight
|
20
|
右移一单词。 |
QTextCursor::NextCell
|
21
|
移到当前表格下一表格单元格的起始。若当前单元格是行的最后单元格,则光标移到下一行的第一单元格。 |
QTextCursor::PreviousCell
|
22
|
移到当前表格上一表格单元格的起始。若当前单元格是行的第一单元格,则光标将移到上一行的最后单元格。 |
QTextCursor::NextRow
|
23
|
移到当前表格下一行的第一新单元格。 |
QTextCursor::PreviousRow
|
24
|
移到当前表格上一行的最后单元格。 |
另请参阅 movePosition ().
此枚举描述的选定类型可应用于 select () 函数。
常量 | 值 | 描述 |
---|---|---|
QTextCursor::Document
|
3
|
选择整个文档。 |
QTextCursor::BlockUnderCursor
|
2
|
选择光标下的文本块。 |
QTextCursor::LineUnderCursor
|
1
|
选择光标下的文本行。 |
QTextCursor::WordUnderCursor
|
0
|
选择光标下的单词。若光标不在可选字符的字符串内,则不选择文本。 |
构造 null 光标。
[explicit]
QTextCursor::
QTextCursor
(
QTextDocument
*
document
)
构造指向起始的光标为 document .
[explicit]
QTextCursor::
QTextCursor
(
QTextFrame
*
frame
)
构造指向起始的光标为 frame .
[explicit]
QTextCursor::
QTextCursor
(const
QTextBlock
&
block
)
构造指向起始的光标为 block .
构造新副本光标为 cursor .
销毁 QTextCursor .
返回锚点位置;这如同 position () 除非存在选取,在这种情况下 position () 标记选择的一端而 anchor() 标记另一端。就像光标位置,锚点位置也在字符之间。
另请参阅 position (), setPosition (), movePosition (), selectionStart (),和 selectionEnd ().
返回
true
若光标在块末尾;否则返回
false
.
另请参阅 atBlockStart () 和 atEnd ().
返回
true
若光标在块开头;否则返回
false
.
另请参阅 atBlockEnd () 和 atStart ().
返回
true
若光标在文档末尾;否则返回
false
.
另请参阅 atStart () 和 atBlockEnd ().
返回
true
若光标在文档开头;否则返回
false
.
另请参阅 atBlockStart () 和 atEnd ().
开始在文档中编辑操作块的指示,这应该作为单一操作出现 (从撤销/重做角度来看)。
例如:
QTextCursor cursor(textDocument); cursor.beginEditBlock(); cursor.insertText("Hello"); cursor.insertText("World"); cursor.endEditBlock(); textDocument->undo();
调用 undo() 将导致 2 插入被撤消,导致 World 和 Hello 两者被移除。
可以嵌套调用 beginEditBlock 和 endEditBlock 。最上面的一对将确定撤消/重做操作的作用域。
另请参阅 endEditBlock ().
返回包含光标的块。
返回光标所在块的块字符格式。
块字符格式是所用格式,当在空块开头插入文本时。
另请参阅 setBlockCharFormat ().
返回光标所在块的块格式。
另请参阅 setBlockFormat () 和 charFormat ().
返回光标所在块的编号,或 0 若光标无效。
注意:此函数在文档中才有意义,没有复杂对象 (譬如:表格或框架)。
立即返回光标之前的字符格式,在 position ()。若光标位于非空文本块的开头,则立即返回光标之后的字符格式。
另请参阅 setCharFormat (), insertText (),和 blockFormat ().
清零当前选定,通过把锚点设置到光标位置。
注意,它 not 删除选定文本。
另请参阅 removeSelectedText () 和 hasSelection ().
返回在其包含行内的光标位置。
注意:这是相对于换行而不是相对于块 (即:段落) 的列号。
可能想要调用 positionInBlock () 代替。
另请参阅 positionInBlock ().
创建并返回新列表采用给定 format ,并使当前段落光标位于第一列表项。
另请参阅 insertList () 和 currentList ().
这是重载函数。
创建并返回新列表采用给定 style ,使光标的当前段落成为第一列表项。
定义要使用样式通过 QTextListFormat::Style 枚举。
另请参阅 insertList () 和 currentList ().
返回当前框架指针。返回
nullptr
若光标无效。
另请参阅 insertFrame ().
返回当前列表若光标
position
() 在属于列表的块内;否则返回
nullptr
.
另请参阅 insertList () 和 createList ().
返回当前表格指针若光标
position
() 在属于表格的块内;否则返回
nullptr
.
另请参阅 insertTable ().
若没有选中文本,删除字符 at 当前光标位置;否则删除选中文本。
另请参阅 deletePreviousChar (), hasSelection (),和 clearSelection ().
若没有选中文本,删除字符 before 当前光标位置;否则删除选中文本。
另请参阅 deleteChar (), hasSelection (),和 clearSelection ().
返回此光标关联的文档。
指示应出现作为单操作的文档块编辑操作结束,从撤消/重做角度来看。
另请参阅 beginEditBlock ().
返回
true
若光标包含的选定范围不只是从
selectionStart
() 到
selectionEnd
();否则返回
false
.
复杂选定是至少跨 2 表格单元格的选定;它们范围的指定是通过 selectedTableCells ().
返回
true
光标包含选定;否则返回
false
.
插入新的空块在光标 position () 采用当前 blockFormat () 和 charFormat ().
另请参阅 setBlockFormat ().
这是重载函数。
插入新的空块在光标 position () 采用块格式 format 和当前 charFormat () 作为块字符格式。
另请参阅 setBlockFormat ().
这是重载函数。
插入新的空块在光标 position () 采用块格式 format and charFormat 作为块字符格式。
另请参阅 setBlockFormat ().
插入文本 fragment 在当前 position ().
插入框架采用给定 format 在当前光标 position (),移动光标 position () 在框架内,并返回框架。
若光标保有选定,整个选定被移入框架。
另请参阅 hasSelection ().
插入文本 html 在当前 position ()。文本被解释成 HTML。
注意: When using this function with a style sheet, the style sheet will only apply to the current block in the document. In order to apply a style sheet throughout a document, use QTextDocument::setDefaultStyleSheet () 代替。
插入图像定义通过 format 在当前 position ().
这是重载函数。
插入图像定义通过给定 format 在光标的当前位置采用指定 alignment .
另请参阅 position ().
这是重载函数。
用于插入图像的方便方法采用给定 name 在当前 position ().
QImage img; textDocument->addResource(QTextDocument::ImageResource, QUrl("myimage"), img); cursor.insertImage("myimage");
这是重载函数。
方便函数用于插入给定 image 采用可选 name 在当前 position ().
Inserts a new block at the current position and makes it the first list item of a newly created list with the given format 。返回创建列表。
另请参阅 currentList (), createList (),和 insertBlock ().
这是重载函数。
Inserts a new block at the current position and makes it the first list item of a newly created list with the given style 。返回创建列表。
另请参阅 currentList (), createList (),和 insertBlock ().
[since 6.4]
void
QTextCursor::
insertMarkdown
(const
QString
&
markdown
,
QTextDocument::MarkdownFeatures
features
= QTextDocument::MarkdownDialectGitHub)
插入 markdown 文本在当前 position (),采用指定的 Markdown features 。默认为 GitHub 方言。
该函数在 Qt 6.4 引入。
创建新的表格采用给定数量的 rows and columns 以指定 format ,将它插入在当前光标 position () 在文档,并返回表格对象。移动光标到第一单元格开头。
表格必须至少存在一行一列。
另请参阅 currentTable ().
这是重载函数。
创建新的表格采用给定数量的 rows and columns ,将它插入在当前光标 position () 在文档,并返回表格对象。移动光标到第一单元格开头。
表格必须至少存在一行一列。
另请参阅 currentTable ().
插入 text 在当前位置,使用当前字符格式。
若存在选定,删除选定并替换以 text ,例如:
cursor.clearSelection(); cursor.movePosition(QTextCursor::NextWord, QTextCursor::KeepAnchor); cursor.insertText("Hello World");
这会清零任何现有选定,选择光标处单词 (即:从 position () 起向前),并以短语 Hello World 替换选定。
插入文本中的任何 ASCII 换行符 \n 会被变换成 Unicode 块分隔符,对应 insertBlock () 调用。
另请参阅 charFormat () 和 hasSelection ().
这是重载函数。
插入 text 在当前位置采用给定 format .
返回
true
若此光标和
other
是彼此的副本 (即:它们中之一是作为另一的副本创建的,且从那之后两者未移动)。这比相等严格得多。
另请参阅 operator= () 和 operator== ().
返回
true
若光标为 null;否则返回
false
。null 光标被创建通过默认构造函数。
像 beginEditBlock () indicates the start of a block of editing operations that should appear as a single operation for undo/redo. However unlike beginEditBlock () it does not start a new block but reverses the previous call to endEditBlock () and therefore makes following operations part of the previous edit block created.
例如:
QTextCursor cursor(textDocument); cursor.beginEditBlock(); cursor.insertText("Hello"); cursor.insertText("World"); cursor.endEditBlock(); // ... cursor.joinPreviousEditBlock(); cursor.insertText("Hey"); cursor.endEditBlock(); textDocument->undo();
调用 undo() 将导致所有 3 插入被撤消。
另请参阅 beginEditBlock () 和 endEditBlock ().
返回是否应该保持光标在当前位置,当将文本插入在光标位置处时。
默认为 false;
另请参阅 setKeepPositionOnInsert ().
Modifies the block char format of the current block (or all blocks that are contained in the selection) with the block format specified by modifier .
另请参阅 setBlockCharFormat ().
Modifies the block format of the current block (or all blocks that are contained in the selection) with the block format specified by modifier .
另请参阅 setBlockFormat () 和 blockFormat ().
合并光标的当前字符格式与特性描述通过格式 modifier 。若光标拥有选定,此函数将应用所有特性设置按 modifier 到选定部分的所有字符格式。
另请参阅 hasSelection () 和 setCharFormat ().
移动光标通过履行给定
operation
n
次,使用指定
mode
,并返回
true
若所有操作均成功完成;否则返回
false
.
例如:若重复使用此函数以寻址下一单词的末尾,它最终将失败,当到达文档末尾时。
默认情况下,移动操作被履行一次 ( n = 1).
若
mode
is
KeepAnchor
,光标选择由它移动覆盖的文本。这与用户达成的效果相同,当按下 Shift 键和采用光标键移动光标时。
另请参阅 setVisualNavigation ().
返回光标在文档中的绝对位置。光标位于字符之间。
注意: 在这种情况下,Characters 是指字符串为 QChar 对象 (即:16 位 Unicode 字符),且位置被视为是此字符串的索引。这不必对应书写系统中的各个字形,因为单个字形可能由多个 Unicode 字符 (如代理对、语言连字或音调符号) 表示。
另请参阅 setPosition (), movePosition (), anchor (),和 positionInBlock ().
返回块内光标的相对位置。光标位于字符之间。
这相当于
position() - block().position()
.
注意: 在这种情况下,Characters 是指字符串为 QChar 对象 (即:16 位 Unicode 字符),且位置被视为是此字符串的索引。这不必对应书写系统中的各个字形,因为单个字形可能由多个 Unicode 字符 (如代理对、语言连字或音调符号) 表示。
另请参阅 position ().
若存在选定,其内容被删除;否则什么都不做。
另请参阅 hasSelection ().
选择文档文本,根据给定 selection .
若选择跨越表格单元格, firstRow 是第一选定行的填充编号, firstColumn 是第一选定列的编号,而 numRows and numColumns 是选定行数和列数。若选定未跨越任何表格单元格,则结果是无害的但不确定。
返回当前选定文本 (可能为空)。这仅返回文本,没有富文本格式化信息。若想要文档片段 (即:格式化的富文本),使用 selection () 代替。
注意:
若从编辑器获得的选定跨越换行符,文本将包含 Unicode U+2029 段落分隔符,而不是换行
\n
字符。使用
QString::replace
() 以采用换行符替换这些字符。
返回当前选定 (可能为空) 自带其所有格式信息。若仅仅希望选择文本 (即:纯文本),使用 selectedText () 代替。
注意: 不像 QTextDocumentFragment::toPlainText (), selectedText () 可能包括特殊 Unicode 字符,譬如 QChar::ParagraphSeparator .
另请参阅 QTextDocumentFragment::toPlainText ().
返回选定的结束,或 position () 若光标没有选定。
另请参阅 selectionStart (), position (),和 anchor ().
返回选定的起始,或 position () 若光标没有选定。
另请参阅 selectionEnd (), position (),和 anchor ().
将当前块 (或选定包含的所有块) 的块字符格式设为 format .
另请参阅 blockCharFormat ().
将当前块 (或选定包含的所有块) 的块格式设为 format .
另请参阅 blockFormat () 和 mergeBlockFormat ().
把光标当前字符格式设为给定 format 。若光标拥有选定,给定 format 将应用于当前选定。
另请参阅 charFormat (), hasSelection (),和 mergeCharFormat ().
Defines whether the cursor should keep its current position when text gets inserted at the current position of the cursor.
若 b is true, the cursor keeps its current position when text gets inserted at the positing of the cursor. If b is false, the cursor moves along with the inserted text.
默认为 false。
Note that a cursor always moves when text is inserted before the current position of the cursor, and it always keeps its position when text is inserted after the current position of the cursor.
另请参阅 keepPositionOnInsert ().
移动光标到文档绝对位置,指定通过
pos
使用
MoveMode
指定通过
m
。光标位于字符之间。
注意: 在这种情况下,Characters 是指字符串为 QChar objects, i.e. 16-bit Unicode characters, and pos is considered an index into this string. This does not necessarily correspond to individual graphemes in the writing system, as a single grapheme may be represented by multiple Unicode characters, such as in the case of surrogate pairs, linguistic ligatures or diacritics. For a more generic approach to navigating the document, use movePosition (), which will respect the actual grapheme boundaries in the text.
另请参阅 position (), movePosition (),和 anchor ().
将垂直移动光标的视觉 X 位置设为 x .
The vertical movement x position is cleared automatically when the cursor moves horizontally, and kept unchanged when the cursor moves vertically. The mechanism allows the cursor to move up and down on a visually straight line with proportional fonts, and to gently "jump" over short lines.
A value of -1 indicates no predefined x position. It will then be set automatically the next time the cursor moves up or down.
另请参阅 verticalMovementX ().
把视觉导航设为 b .
视觉导航意味着跳过隐藏文本段落。默认为 false。
另请参阅 visualNavigation () 和 movePosition ().
交换此文本光标实例与 other 。此函数非常快且从不失败。
返回垂直移动光标的视觉 X 位置。
A value of -1 indicates no predefined x position. It will then be set automatically the next time the cursor moves up or down.
另请参阅 setVerticalMovementX ().
返回
true
若光标做视觉导航;否则返回
false
.
视觉导航意味着跳过隐藏文本段落。默认为 false。
另请参阅 setVisualNavigation () 和 movePosition ().
返回
true
若
other
cursor is at a different position in the document as this cursor; otherwise returns
false
.
返回
true
若
other
cursor is positioned later in the document than this cursor; otherwise returns
false
.
返回
true
若
other
cursor is positioned later or at the same position in the document as this cursor; otherwise returns false.
制作副本为 cursor 并将其赋值给此 QTextCursor 。注意, QTextCursor 是 隐式共享 类。
返回
true
若
other
光标如此光标在文档中的位置相同; 否则返回
false
.
返回
true
若
other
cursor is positioned earlier in the document than this cursor; otherwise returns
false
.
返回
true
若
other
cursor is positioned earlier or at the same position in the document as this cursor; otherwise returns false.