Qt开发专栏:开发技术(点击传送门)
《Qt开发技术:Qt富文本(二)Qt文本光标操作、文档布局、富文本编辑、处理和Demo》
《Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类》
前话
红胖子,来也!
Qt的富文本技术介绍,Qt5.9支持的HTML子集,留存当作查询工具,附带开发富文本使用到的Qt类列表。
支持的HTML子集
概述
Qt的文本小部件能够显示富文本,这是使用HTML 4标记的子集指定的。使用QTextDocument的小部件(如QLabel和QTextEdit)能够以这种方式显示指定的富文本。
在文本小部件中使用HTML标记
小部件自动检测HTML标记并相应地显示富文本。例如,使用字符串“<b>Hello</b><i>Qt!</i>”设置标签的文本属性,显示如下文本:“Hello Qt!”。
当HTML标记用于文本时,Qt遵循HTML4规范定义的规则。这包括文本布局的默认属性,例如文本流的方向(从左到右),可以通过将dir属性应用于文本块来更改。
支持的标记
下表列出了Qt的富文本引擎支持的HTML标记:
序号 |
标记 |
描述 |
备注 |
1 |
a |
锚或链环 |
支持href和name属性。 |
2 |
address |
地址 |
|
3 |
b |
粗体 |
|
4 |
big |
大字体 |
|
5 |
blockquote |
缩进段落 |
|
6 |
body |
文件正文 |
支持bgcolor属性,它可以是Qt颜色名称或RRGGBB颜色规范。 |
7 |
br |
换行符 |
|
8 |
center |
居中段落 |
|
9 |
cite |
内联引用 |
Same as i |
10 |
code |
代码 |
Same as tt |
11 |
dd |
定义数据 |
|
12 |
dfn |
定义 |
Same as i. |
13 |
div |
文件分隔 |
支持标准块属性。 |
14 |
dl |
定义列表 |
支持标准块属性。 |
15 |
dt |
定义术语 |
支持标准块属性。 |
16 |
em |
强调 |
Same as i. |
17 |
font |
字体大小、系列和/或颜色 |
支持以下属性:大小、面和颜色(Qt颜色名称或RRGGBB)。 |
18 |
h1 |
一级标题 |
|
19 |
h2 |
二级标题 |
|
20 |
h3 |
三级标题 |
|
21 |
h4 |
四级标题 |
|
22 |
h5 |
五级标题 |
|
23 |
h6 |
六级标题 |
|
24 |
head |
文档标题 |
|
25 |
hr |
水平线 |
|
26 |
html |
HTML文档 |
|
27 |
i |
斜体 |
|
28 |
img |
图像 |
支持src、source(与Qt 3兼容)、width和height属性。 |
29 |
kbd |
用户输入的文本 |
|
30 |
meta |
元信息 |
如果使用meta标记指定了文本编码,则Qt::codecForHtml()将接收该文本编码。同样,如果将编码指定给QTextDocument::toHtml(),则使用元标记存储编码,例如: <meta http-equiv="Content-Type" content="text/html; charset=EUC-JP" /> |
31 |
li |
列表项 |
|
32 |
nobr |
不可断文本 |
|
33 |
ol |
有序列表 |
支持标准列表属性。 |
34 |
p |
段落 |
默认情况下左对齐。支持标准块属性。 |
35 |
pre |
预格式文本 |
|
36 |
qt |
Qt富文本文档 |
html的同义词。为与早期版本的Qt兼容而提供。 |
37 |
s |
删除线 |
|
38 |
samp |
示例代码 |
|
39 |
small |
小字体 |
|
40 |
span |
分组元素 |
|
41 |
strong |
加粗 |
|
42 |
sub |
下标 |
|
43 |
sup |
上标 |
|
44 |
table |
表格 |
支持以下属性:border、bgcolor(Qt颜色名称或RRGGBB)、cellspacing、cellpadding、width(绝对或相对)和height。 |
45 |
tbody |
表格体 |
什么都不做 |
46 |
td |
表数据单元 |
支持标准表单元格属性。 |
47 |
tfoot |
表页脚 |
什么都不做 |
48 |
th |
表标题单元格 |
支持标准表单元格属性。 |
49 |
thead |
表格标题 |
如果指定了thead标记,则在打印跨多页的表时使用它。 |
50 |
title |
标题 |
使用title标记指定的值可通过QTextDocument::metaInformation()获得。 |
51 |
tr |
表格行 |
支持bgcolor属性,它可以是Qt颜色名称或RRGGBB颜色规范。 |
52 |
tt |
打字字体 |
|
53 |
u |
下划线 |
|
54 |
ul |
无序列表 |
支持标准列表属性。 |
55 |
var |
变量 |
Same as i. |
块属性
div、dl、dt、h1、h2、h3、h4、h5、h6、p标记支持以下属性:
- align (left, right, center, justify)
- dir (ltr, rtl)
列表属性
ol和ul标记支持以下属性:
- type (1, a, A, square, disc, circle)
表单元格属性
td和th标记支持以下属性:
- width (absolute, relative, or no-value)
- bgcolor (Qt color names or #RRGGBB)
- colspan
- rowspan
- align (left, right, center, justify)
- valign (top, middle, bottom)
CSS属性
下表列出了Qt的富文本引擎支持的CSS属性:
序号 |
属性 |
值 |
描述 |
1 |
background-color |
<color> |
元素的背景色 |
2 |
background-image |
<uri> |
元素的背景图像 |
3 |
color |
<color> |
文本前景色 |
4 |
font-family |
<family name> |
字体名称 |
5 |
font-size |
[ small | medium | large | x-large | xx-large ] | <size>pt | <size>px |
相对于文档字体或以点或像素为单位指定的字体大小 |
6 |
font-style |
[ normal | italic | oblique ] |
|
7 |
font-weight |
[ normal | bold | 100 | 200 | 300 | 400 | 500 | 600 | 700 | 800 | 900 ] |
指定用于文本的字体权重,其中normal和bold映射到相应的QFont权重。数值是等效QFont权重值的8倍。 |
8 |
text-decoration |
none | [ underline || overline || line-through ] |
附加文本效果 |
9 |
font |
[ [ <'font-style'> || <'font-weight'> ]? <'font-size'> <'font-family'> ] |
字体速记属性 |
10 |
text-indent |
<length>px |
以像素为单位的第一行文本缩进 |
11 |
white-space |
normal | pre | nowrap | pre-wrap |
声明如何处理HTML中的空白。 |
12 |
margin-top |
<length>px |
以像素为单位的顶部段落边距 |
13 |
margin-bottom |
<length>px |
以像素为单位的底部段落边距 |
14 |
margin-left |
<length>px |
以像素为单位的左段落边距 |
15 |
margin-right |
<length>px |
以像素为单位的右段落边距 |
16 |
padding-top |
<length>px |
顶部表格单元格填充(像素) |
17 |
padding-bottom |
<length>px |
底部表格单元格填充(像素) |
18 |
padding-left |
<length>px |
左表单元格填充(像素) |
19 |
padding-right |
<length>px |
右表格单元格填充(像素) |
20 |
padding |
<length>px |
一次设置所有填充属性的简写。 |
21 |
vertical-align |
baseline | sub | super | middle | top | bottom |
垂直文本对齐。对于文本表格单元格中的垂直对齐,只应用中间、顶部和底部。 |
22 |
border-color |
<color> |
文本表的边框颜色。 |
23 |
border-style |
none | dotted | dashed | dot-dash | dot-dot-dash | solid | double | groove | ridge | inset | outset |
文本表的边框样式。 |
24 |
background |
[ <'background-color'> || <'background-image'> ] |
背景速记属性 |
25 |
page-break-before |
[ auto | always ] |
使在段落/表之前强制分页符 |
26 |
page-break-after |
[ auto | always ] |
使在段落/表之后强制分页符 |
27 |
float |
[ left | right | none ] |
指定图像或文本将放置在另一个元素中的位置。请注意,float属性仅支持表和图像。 |
28 |
text-transform |
[ uppercase | lowercase ] |
选择在显示文本之前将对其执行的转换。 |
29 |
font-variant |
small-caps |
在显示文本之前对其执行smallcaps转换。 |
30 |
word-spacing |
<width>px |
指定每个单词之间的间距。 |
富文本处理相关类
Qt为解析、呈现、操作和编辑富文本提供了大量的类集合。
序号 |
类 |
描述 |
1 |
QAbstractTextDocumentLayout |
用于实现QTextDocuments自定义布局的抽象基类 |
2 |
QFont |
指定用于绘制文本的字体 |
3 |
QSyntaxHighlighter |
允许您定义语法突出显示规则,此外,还可以使用该类查询文档的当前格式或用户数据 |
4 |
QTextCursor |
提供访问和修改QTextDocuments的API |
5 |
QTextDocument |
保存格式化文本 |
6 |
QTextDocumentFragment |
表示来自QTextDocument的格式化文本 |
7 |
QTextDocumentWriter |
用于将QTextDocument写入文件或其他设备的独立于格式的接口 |
8 |
QTextBlockFormat |
QTextDocument中文本块的格式信息 |
9 |
QTextCharFormat |
QTextDocument中字符的格式信息 |
10 |
QTextFormat |
QTextDocument的格式信息 |
11 |
QTextFrameFormat |
QTextDocument中文本框架的格式信息 |
12 |
QTextImageFormat |
QTextDocument中图像的格式信息 |
13 |
QTextLength |
封装QTextDocument中使用的不同长度类型 |
14 |
QTextListFormat |
QTextDocument中列表的格式信息 |
15 |
QTextTableCellFormat |
QTextDocument中表格单元格的格式信息 |
16 |
QTextTableFormat |
QTextDocument中表的格式信息 |
17 |
QTextInlineObject |
表示QAbstractTextDocumentLayout中的内联对象及其实现 |
18 |
QTextLayout |
用于布局和呈现文本 |
19 |
QTextLine |
表示QTextLayout中的一行文本 |
20 |
QTextList |
QTextDocument中项目的修饰列表 |
21 |
QTextBlock |
QTextDocument中文本片段的容器 |
22 |
QTextBlockGroup |
QTextDocument中文本块的容器 |
23 |
QTextBlockUserData |
用于将自定义数据与文本块关联 |
24 |
QTextFragment |
以单个QTextCharFormat保存QTextDocument中的文本 |
25 |
QTextFrame |
表示QTextDocument中的文本框架 |
26 |
QTextObject |
可以将QTextDocument的各个部分组合在一起的不同类型对象的基类 |
27 |
QTextFrame::iterator |
用于读取QTextFrame内容的迭代器 |
28 |
QTextBlock::iterator |
用于读取QTextBlock内容的迭代器 |
29 |
QTextOption |
一般富文本属性的描述 |
30 |
QTextTable |
表示QTextDocument中的表 |
31 |
QTextTableCell |
表示QTextTable中单元格的属性 |
32 |
QPlainTextDocumentLayout |
为QTextDocument实现纯文本布局 |
33 |
QPlainTextEdit |
用于编辑和显示纯文本的小部件 |
34 |
QTextBrowser |
带超文本导航的富文本浏览器 |
35 |
QTextEdit |
用于编辑和显示纯文本和富文本的小部件 |
QTextBlock
概述
QTextDocument类保存格式化文本。
QTextDocument是结构化富文本文档的容器,为样式文本和各种类型的文档元素(如列表、表、框架和图像)提供支持。它们可以创建为在QTextEdit中使用,也可以单独使用。
每个文档元素都由关联的格式对象描述。QTextDocuments将每个format对象视为唯一的对象,并可以将其传递给objectForFormat()以获取要应用到的document元素。
可以使用QTextCursor以编程方式编辑QTextDocument,还可以通过遍历文档结构来检查其内容。整个文档结构存储为根框架下的文档元素层次结构,根框架是通过rootFrame()函数找到的。或者,如果只想遍历文档的文本内容,可以使用begin()、end()和findBlock()来检索可以检查和遍历的文本块。
文档的布局由documentLayout()决定;如果要使用自己的布局逻辑,可以创建自己的QAbstractTextDocumentLayout子类并使用setDocumentLayout()设置它。通过调用metaInformation()函数可以获得文档的标题和其他元信息。对于通过QTextEdit类向用户公开的文档,还可以通过QTextEdit::documentTitle()函数使用文档标题。
toPlainText()和toHtml()函数允许以纯文本和HTML的形式检索文档内容。可以使用find()函数搜索文档的文本。
可以使用setUndoRedoEnabled()函数控制对文档执行的操作的撤消/重做。undo/redo系统可以由编辑器小部件通过undo()和redo()插槽控制;文档还提供contentsChanged()、undoAvailable()和redoAvailable()信号,通知连接的编辑器小部件undo/redo系统的状态。以下是QTextDocument的撤消/重做操作:
- 插入或删除字符。同一文本块中的插入或删除序列被视为单个撤消/重做操作。
- 插入或删除文本块。单个操作中的插入或删除序列(例如,通过选择然后删除文本)被视为单个撤消/重做操作。
- 文本字符格式更改。
- 文本块格式更改。
- 文本块组格式更改。
枚举
enum QTextDocument::FindFlag
此枚举描述QTextDocument的find函数可用的选项。这些选项可以从以下列表中选择或组合在一起:
序号 |
枚举 |
值 |
描述 |
1 |
QTextDocument::FindBackward |
0 |
向后搜索而不是向前搜索 |
2 |
QTextDocument::FindCaseSensitively |
1 |
默认情况下,find works不区分大小写。指定此选项会将行为更改为区分大小写的查找操作 |
3 |
QTextDocument::FindWholeWords |
4 |
使查找只匹配完整的单词 |
FindFlags类型是QFlags<FindFlag>的typedef。它存储FindFlag值的一个或多个组合。
enum QTextDocument::MetaInformation
此枚举描述可以添加到文档中的不同类型的元信息。
序号 |
枚举 |
值 |
描述 |
1 |
QTextDocument::DocumentTitle |
0 |
文件的标题。 |
2 |
QTextDocument::DocumentUrl |
1 |
文档的url。loadResource()函数的作用是:加载此url作为资源。 |
enum QTextDocument::ResourceType
此枚举描述QTextDocument的loadResource()函数可以加载的资源类型。
序号 |
枚举 |
值 |
描述 |
1 |
QTextDocument::HtmlResource |
1 |
资源包含HTML。 |
2 |
QTextDocument::ImageResource |
2 |
资源包含图像数据。当前支持的数据类型是QVariant::Pixmap和QVariant::Image。 如果对应的变量类型为QVariant::ByteArray,则Qt尝试使用QImage::loadFromData加载图像。当前不支持QVariant::Icon。 首先需要将图标转换为支持的类型之一,例如使用QIcon::pixmap。 |
3 |
QTextDocument::StyleSheetResource |
3 |
资源包含CSS |
4 |
QTextDocument::UserResource |
100 |
用户定义的资源类型的第一个可用值。 |
enum QTextDocument::Stacks
序号 |
枚举 |
值 |
描述 |
1 |
QTextDocument::UndoStack |
1 |
撤消堆栈 |
2 |
QTextDocument::RedoStack |
2 |
重做堆栈 |
3 |
QTextDocument::UndoAndRedoStacks |
1 | 2 |
撤消和重做堆栈 |
QTextFrame
概述
QTextFrame类表示QTextDocument中的文本框架。
文本框架为文档中的文本提供了结构。它们用作其他文档元素的通用容器。框架通常使用QTextCursor::insertFrame()创建。
QTextFrame可用于在富文本文档中创建层次结构。每个文档都有一个根框架(QTextDocument::rootFrame()),根框架下的每个框架都有一个父框架和一个(可能是空的)子框架列表。父文本框架可以通过parentFrame()找到,childFrames()函数提供子文本框架列表。
每个框架至少包含一个文本块,使文本光标能够在其中插入新的文档元素。因此,QTextFrame::iterator类用于遍历给定文本框架中的块和子文本框架。框架中的第一个子元素和最后一个子元素可以用begin()和end()找到。
框架还有一种格式(使用QTextFrameFormat指定),可以用setFormat()设置,也可以用format()读取。
可以获得指向文本框架中第一个和最后一个有效光标位置的文本光标;为此,请使用firstCursorPosition()和lastCursorPosition()函数。文档中框架的范围可以使用firstPosition()和lastPosition()找到。
可以使用QTextFrame::iterator类迭代文本框架的内容:这提供了对其内部文本块和子文本框架列表的只读访问。
QTextTable
概述
QTextTable类表示QTextDocument中的表。
表是按行和列排序的一组单元格。每个表至少包含一行和一列。每个单元格包含一个块,并由一个框架包围。
表通常使用QTextCursor::insertTable()函数创建并插入到文档中。例如,可以使用以下代码行在编辑器中的当前光标位置插入一个包含三行和两列的表:
QTextCursor cursor(editor->textCursor()); cursor.movePosition(QTextCursor::Start); QTextTable *table = cursor.insertTable(rows, columns, tableFormat);
表格式是在创建表时定义的,或者使用setFormat()更改。
通过QTextCursor::currentTable()找到当前由游标编辑的表。这允许在将其插入文档后更改其格式或维度。
可以使用resize()更改表的大小,也可以使用insertRows()、insertColumns()、removeRows()或removeColumns()更改表的大小。使用cellAt()检索表单元格。
通过在表中移动光标,并使用rowStart()和rowEnd()函数在每行的开始和结束处获取光标,可以找到表行的开始和结束位置。
可以使用mergeCells()和splitCell()函数合并和拆分QTextTable中的行和列。但是,只能拆分跨多行或多列的单元格。(合并或拆分不会增加或减少行数和列数。)
请注意,如果已将多个列和行合并到一个单元格中,则无法将合并的单元格拆分为跨越多个行或列的新单元格。要能够拆分跨越多个行和列的单元格,您需要在多个迭代中执行此操作。
有一个2x3的名称和地址表。
为了合并第一行中的两列,调用了mergeCells(),row=0,column=0,numRows=1,numColumns=2。
table->mergeCells(0, 0, 1, 2);
若要将表的第一行拆分为两个单元格,请使用numRows和numCols=1调用splitCell()函数。
table->splitCell(0, 0, 1, 1);
恢复原始表:
QTextList
概述
QTextList类提供QTextDocument中项目的修饰列表。
列表包含一系列文本块,每个文本块都用项目符号或其他符号标记。可以使用多个级别的列表,并且自动编号功能支持顺序数字和字母列表。
列表是通过使用文本光标在当前位置插入空列表或将现有文本移动到新列表中来创建的。函数的作用是:在文档的光标位置插入一个空块,使其成为列表中的第一项。
QTextListFormat listFormat; if (list) { listFormat = list->format(); listFormat.setIndent(listFormat.indent() + 1); } listFormat.setStyle(QTextListFormat::ListDisc); cursor.insertList(listFormat);
QTextCursor::createList()函数的作用是:获取光标当前块的内容,并将其转换为新列表的第一项。
光标的当前列表使用QTextCursor::currentList()找到。
列表中的项数由count()给定。使用item()函数可以通过列表中的索引获取每个项。类似地,可以使用itemNumber()找到给定项的索引。使用itemText()函数可以找到每个项的文本。
请注意,列表中的项可能不是文档中的相邻元素。例如,多级列表中的顶级项将由列表中较低级别的项分隔。
可以使用removeItem()函数通过索引删除列表项。remove()删除列表中的指定项。
列表的格式用setFormat()设置,用format()读取。格式描述的是列表本身的属性,而不是单个项。
QTextFragment
概述
QTextFragment类以单个QTextCharFormat保存QTextDocument中的一段文本。
文本片段描述以单个字符格式存储的文本片段。字符格式改变的文本可以用不同格式的文本片段序列表示。
如果用户在片段中编辑文本并引入不同的字符格式,则片段的文本将在格式更改的每个点处拆分,并创建新的片段。例如,在句子中间更改某个文本的样式将导致该片段分成三个独立的片段:第一个和第三个片段的格式与之前相同,第二个片段的格式与之前相同。第一个片段将包含句子开头的文本,第二个片段将包含中间的文本,第三个片段从句子结尾获取文本。
片段的文本和字符格式可以通过text()和charFormat()函数获得。Length()函数的作用是:给出片段中文本的长度。position()给出片段开始在文档中的位置。使用contains()函数确定片段是否包含文档中的特定位置。
QTextImageFormat
概述
QTextImageFormat类为qtext文档中的图像提供格式信息。
内联图像由Unicode值U+FFFC(对象替换字符)表示,该值具有关联的QTextImageFormat。图像格式使用setName()指定用于定位图像的名称。图像将占用的矩形的大小是使用setWidth()和setHeight()指定的。
图像可以以Qt有图像阅读器的任何格式提供,因此SVG图形可以与PNG、TIFF和其他位图格式一起提供。
QTextCursor
概述
QTextCursor类提供了访问和修改QTextDocuments的API。
文本光标是通过模拟文本编辑器中光标行为的编程接口访问和修改文本文档的内容和底层结构的对象。QTextCursor包含有关光标在QTextDocument中的位置及其所做的任何选择的信息。
QTextCursor是根据文本光标在文本编辑器中的行为方式建模的,它提供了通过用户界面执行标准操作的编程方法。文档可以看作是一个字符串。光标的当前position()始终位于字符串中两个连续字符之间,或者位于字符串中第一个字符之前或最后一个字符之后。除了文本之外,文档还可以包含表、列表、图像和其他对象,但从开发人员的角度来看,文档可以被视为一个长字符串。该字符串的某些部分可以被视为位于特定块(例如段落)中,或位于表单元格、列表项或其他结构元素中。当我们提到“当前字符”时,我们指的是文档中光标position()之前的字符。类似地,“当前块”是包含光标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()函数将格式应用于当前文本文档。“set”函数将替换光标的当前字符或块格式,而“merge”函数将给定的格式属性添加到光标的当前格式。如果光标有选择,则将给定格式应用于当前选择。请注意,仅选择块的一部分时,块格式将应用于整个块。可以使用createList()将当前字符位置的文本转换为列表。
可以使用deleteChar()、deletePreviousChar()和removeSelectedText()实现删除。
文本字符串可以用insertText()函数插入到文档中,块(代表新段落)可以用insertBlock()插入。
现有的文本片段可以使用insertFragment()插入,但是,如果要插入各种格式的文本片段,通常使用insertText()并提供字符格式更容易。
还可以使用光标将各种类型的高级结构插入到文档中:
- 列表是用项目符号或符号修饰的块元素的有序序列。它们是用insertList()以指定格式插入的。
- 表是用insertTable()函数插入的,可以指定可选格式。这些单元格包含一个可以使用光标遍历的单元格数组。
- 使用insertImage()插入内联图像。要使用的图像可以用图像格式或名称指定。
- 通过使用指定格式调用insertFrame()插入文本框架。
可以使用beginEditBlock()和endEditBlock()对操作进行分组(即将其视为撤消/重做的单个操作)。
光标移动仅限于有效的光标位置。在拉丁语写作中,这是在文本中任何两个连续字符之间,在第一个字符之前,或在最后一个字符之后。在其他一些书写系统中,光标的移动仅限于“簇”(例如天成文书中的一个音节,或一个基音字母加上变音符号)。movePosition()和deleteChar()等函数将光标移动限制在这些有效位置。
枚举
enum QTextCursor::MoveMode:移动模式
序号 |
枚举 |
值 |
描述 |
1 |
QTextCursor::MoveAnchor |
0 |
将定位点移动到与光标本身相同的位置 |
2 |
QTextCursor::KeepAncho |
1 |
把锚放在原地 |
如果anchor()保持在原来的位置,并且position()移动,则将选择介于两者之间的文本。
enum QTextCursor::MoveOperation:移动操作
序号 |
枚举 |
值 |
描述 |
1 |
QTextCursor::NoMove |
0 |
把光标放在原地 |
2 |
QTextCursor::Start |
1 |
移到文档的开头 |
3 |
QTextCursor::StartOfLine |
3 |
移到当前行的开头 |
4 |
QTextCursor::StartOfBlock |
4 |
移到当前块的开头 |
5 |
QTextCursor::StartOfWord |
5 |
移到当前单词的开头 |
6 |
QTextCursor::PreviousBlock |
6 |
移到上一个块的开头 |
7 |
QTextCursor::PreviousCharacter |
7 |
移到上一个字符。 |
8 |
QTextCursor::PreviousWord |
8 |
移到上一个单词的开头。 |
9 |
QTextCursor::Up |
2 |
向上移动一行。 |
10 |
QTextCursor::Left |
9 |
向左移动一个字符 |
11 |
QTextCursor::WordLeft |
10 |
左移一个字/单词 |
12 |
QTextCursor::End |
11 |
移到文档末尾 |
13 |
QTextCursor::EndOfLine |
13 |
移到当前行的末尾。 |
14 |
QTextCursor::EndOfWord |
14 |
移到当前单词的结尾。 |
15 |
QTextCursor::EndOfBlock |
15 |
移到当前块的末尾。 |
16 |
QTextCursor::NextBlock |
16 |
移到下一个块的开头。 |
17 |
QTextCursor::NextCharacter |
17 |
移到下一个字符。 |
18 |
QTextCursor::NextWord |
18 |
转到下一个单词。 |
19 |
QTextCursor::Down |
12 |
向下移动一行。 |
20 |
QTextCursor::Right |
19 |
向右移动一个字符 |
21 |
QTextCursor::WordRight |
20 |
右移一个字/单词 |
22 |
QTextCursor::NextCell |
21 |
移到当前表中下一个表单元格的开头。如果当前单元格是行中的最后一个单元格,则光标将移动到下一行中的第一个单元格。 |
23 |
QTextCursor::PreviousCell |
22 |
移到当前表中上一个表单元格的开头。如果当前单元格是行中的第一个单元格,则光标将移动到前一行中的最后一个单元格。 |
24 |
QTextCursor::NextRow |
23 |
移到当前表中下一行的第一个新单元格。 |
25 |
QTextCursor::PreviousRow |
24 |
移到当前表中前一行的最后一个单元格。 |
QTextLayout
概述
QTextLayout类用于布局和呈现文本。
它提供了许多现代文本布局引擎所需的功能,包括符合Unicode的呈现、换行和光标定位处理。它还可以生成和呈现与设备无关的布局,这对所见即所得应用程序非常重要。
这个类有一个相当低级的API,除非您打算为某个特定的小部件实现自己的文本呈现,否则您可能不需要直接使用它。
QTextLayout可以与纯文本和富文本一起使用。
QTextLayout可用于创建具有给定宽度的QTextLine实例序列,并可在屏幕上独立定位它们。一旦布局完成,就可以在绘制设备上绘制这些线。
要布局的文本可以在构造函数中提供,也可以使用setText()设置。
布局可以看作一系列QTextLine对象;使用createLine()创建QTextLine实例,使用lineAt()或lineForTextPosition()检索创建的行。
下面是布局阶段的代码片段示例:
int leading = fontMetrics.leading(); qreal height = 0; textLayout.setCacheEnabled(true); textLayout.beginLayout(); while (1) { QTextLine line = textLayout.createLine(); if (!line.isValid()) { break; } line.setLineWidth(lineWidth); height += leading; line.setPosition(QPointF(0, height)); height += line.height(); } textLayout.endLayout();
然后可以通过调用布局的draw()函数来呈现文本:
对于文本中的给定位置,可以使用isValidCursorPosition()、nextCursorPosition()和previousCursorPosition()找到有效的光标位置。
QTextLayout本身可以使用setPosition()定位;它有boundingRect()和minimumWidth()和maximumWidth()。
枚举
enum QTextLayout::CursorMode:
序号 |
枚举 |
值 |
描述 |
1 |
QTextLayout::SkipCharacters |
0 |
|
2 |
QTextLayout::SkipWords |
1 |
|