Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类

简介: Qt开发技术:Qt富文本(三)Qt支持的HTML子集(查询手册)以及涉及的类

Qt开发专栏:开发技术(点击传送门)

Qt开发技术: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

图像

支持srcsource(与Qt 3兼容)、widthheight属性。

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

表格

支持以下属性:borderbgcolorQt颜色名称或RRGGBB)、cellspacingcellpaddingwidth(绝对或相对)和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

提供访问和修改QTextDocumentsAPI

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

文档的urlloadResource()函数的作用是:加载此url作为资源。

enum QTextDocument::ResourceType

     此枚举描述QTextDocument的loadResource()函数可以加载的资源类型。

序号

枚举

描述

1

QTextDocument::HtmlResource

1

资源包含HTML。

2

QTextDocument::ImageResource

2

资源包含图像数据。当前支持的数据类型是QVariant::PixmapQVariant::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

 

 

相关文章
|
1月前
|
编解码 UED
Qt侧边栏的动态切换:隐藏与显示技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了导航和工具面板的功能。在某些应用场景下,我们可能需要动态地隐藏或显示侧边栏,以优化界面布局或提供更灵活的用户体验。本文将分享如何在Qt框架下实现侧边栏的隐藏与呈现,包括技术细节和代码示例。
131 3
|
28天前
|
存储 移动开发 前端开发
高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容
本文深入探讨了高效的 HTML 与 CSS 编写技巧,涵盖语义化标签、文档结构优化、CSS 预处理、模块化设计、选择器优化、CSS 变量、媒体查询等内容,旨在提升开发效率、网站性能和用户体验。
41 5
|
1月前
|
UED
Qt侧边栏的动态展示:隐藏与呈现技术详解
在现代用户界面设计中,侧边栏(Sidebar)是一个常见的组件,它为用户提供了便捷的导航和操作入口。在Qt框架中,实现侧边栏的隐藏与呈现不仅能够提升应用的美观度,还能增强用户体验。本文将详细介绍如何在Qt中实现侧边栏的动态隐藏与呈现,包括技术要点和代码实现。
81 0
|
3月前
|
C++ Windows
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
HTML+JavaScript构建C++类代码一键转换MASM32代码平台
|
3月前
|
开发工具 C++
qt开发技巧与三个问题点
本文介绍了三个Qt开发中的常见问题及其解决方法,并提供了一些实用的开发技巧。
|
3月前
|
3月前
|
设计模式 前端开发 安全
Qt注册类对象单例与单类型区别
在进行开发时,应当根据具体的应用场景和需求来选择使用单例模式或是单类型。如果是全局服务或状态管理,可能需要单例模式;如果是为了使QML环境下的不同组件能够访问到同一个后端服务对象,则可能需要使用单类型。
51 2
|
4月前
|
C++
C++ Qt开发:QUdpSocket网络通信组件
QUdpSocket是Qt网络编程中一个非常有用的组件,它提供了在UDP协议下进行数据发送和接收的能力。通过简单的方法和信号,可以轻松实现基于UDP的网络通信。不过,需要注意的是,UDP协议本身不保证数据的可靠传输,因此在使用QUdpSocket时,可能需要在应用层实现一些机制来保证数据的完整性和顺序,或者选择在适用的场景下使用UDP协议。
209 2
|
5月前
|
数据安全/隐私保护 C++ 计算机视觉
Qt(C++)开发一款图片防盗用水印制作小工具
文本水印是一种常用的防盗用手段,可以将文本信息嵌入到图片、视频等文件中,用于识别和证明文件的版权归属。在数字化和网络化的时代,大量的原创作品容易被不法分子盗用或侵犯版权,因此加入文本水印成为了保护原创作品和维护知识产权的必要手段。 通常情况下,文本水印可以包含版权声明、制作者姓名、日期、网址等信息,以帮助识别文件的来源和版权归属。同时,为了增强防盗用效果,文本水印通常会采用字体、颜色、角度等多种组合方式,使得水印难以被删除或篡改,有效地降低了盗用意愿和风险。 开发人员可以使用图像处理技术和编程语言实现文本水印的功能,例如使用Qt的QPainter类进行文本绘制操作,将文本信息嵌入到图片中,
201 1
|
4月前
|
监控 C++ 容器
【qt】MDI多文档界面开发
【qt】MDI多文档界面开发
118 0