QTextEdit的父类为QAbstractScrollArea

QTextEdit支持HTML4的富文本内容

目录

1  QTextEdit基本操作

1.1  创建QTextEdit

1.2  占位提示文本

1.2.1  设置 setPlaceholderText()

1.2.2  获取 te.placeholderText()

2  内容设置

2.1  普通文本

2.1.1  设置普通文本 setPlainText()

2.1.2  插入普通文本 insertPlainText()

2.1.3  获取普通文本 toPlainText()

2.2  富文本 html

2.2.1  设置富文本 setHtml()

2.2.2  插入富文本 inserHtml()

2.2.3  获取富文本 te.toHtml()

2.3  设置文本(自动判定) setText()

2.4  追加文本 append()

2.4.1  富文本

2.4.2  普通文本

2.5  清空文本 clear()

2.6  文本光标

2.6.1  获取文本文档 document()

2.6.2  获取文本光标 textCursor()

2.6.3  文本光标插入文本

2.6.4  光标插入图片 insertImage()

2.6.5  光标插入文本片段 insertFragment()

2.6.6  插入列表

2.6.7  插入表格 inserTable()

2.6.8  插入文本块

2.6.9  插入文本框架

2.6.10  设置和合并格式

2.6.11  获取格式与内容

2.6.12  文本的选中和清空

2.6.13  删除内容

2.6.14  位置相关

2.6.15  开始和结束编辑标识

3  自动格式化

3.1  设置 setAutoFormatting()

3.1.1  QTextEdit.AutoNone 不做任何自动格式化

3.1.2  QTextEdit.AutoBulleList 自动创建项目符号列表

3.1.3  QTextEdit.AutoAll 应用所有自动格式

3.2  获取 autoFormatting()

4  软换行模式

4.1  设置换行模式

4.1.1  不换行 QTextEdit.NoWrap

4.1.2  以控件的宽度为限制换行 QTextEdit.WidgetWidth

4.1.3  固定列宽换行 QTextEdit.FixedPixelWidth

4.1.4  固定列数换行 QTextEdit.FixedColumnWidth

4.2  设置单词换行模式 setWordWrapMode()

4.2.1  QTextOption.NoWrap 不换行了

4.2.2  保持单词完整性 QTextOption.WordWrap

4.2.3  手动换行 QTextOption.ManualWrap

4.2.4  不保持单词完整性 QTextOption.WrapAnywhere

4.2.5  尽量赶在单词边界换行否则就任意位置换行QTextOption.WrapAtWordBoundaryOrAnywhere

4.3  获取换行模式

4.4  获取单词换行模式

5  覆盖模式

5.1  设置 setOverwriteMode()

5.2  获取 overwriteMode()

6  文本光标设置

6.1  设置文本光标宽度 setCursorWidth()

6.2  获取文本光标宽度 cursorWidth()

6.3  获取文本光标的矩形区域 cursorRect()

7  对齐方式

7.1  设置 setAlignment()

7.1.1  左对齐 Qt.AlignLeft

7.1.2  右对齐 Qt.AlignRight

7.1.3  居中对齐 Qt.AlignCenter

7.2  获取 alignment()

8  字体格式

8.1  字体类型

8.1.1  设置 setFontFamily()

8.1.2  获取 fontFamily()

8.1.3  获取所有可用的字体类型 QFontDialog.getFont()

8.2  字体样式

8.2.1  字体粗细

8.2.2  字体斜体

8.3  字体尺寸

8.3.1  设置 setFontPointSize()

8.3.2  获取 fontPointSize()

8.4  字体下划线

8.4.1  设置 setFontUnderline()

8.4.2  获取 fontUnderline()

8.5  统一设置 QFont

8.5.1  设置 setCurrentFont(QFont)

8.5.2  获取 currentFont()

9  颜色设置

9.1  文本背景颜色

9.1.1  设置 setTextBackgroundColor()

9.1.2  获取 textBackgroundColor()

9.2  文本颜色

9.2.1  设置 setTextColor()

9.2.2  获取 textColor()

10  当前字符格式

10.1  设置当前字符格式

10.1.1  字体大小写

10.1.2  字体颜色

10.1.3  超链接 setAnchorHref

11  常用编辑操作

11.1  canPaste() 查看能否粘贴

11.2  selectAll() 全选

11.3  find() 查找

12  滚动至锚点

12.1  设置锚点

12.2  滚动动作

13  只读设置

13.1  设置 setReadOnly()

13.2  获取 isReadOnly()

14  Tab控制

14.1  设置Tab功能为改变焦点,而不是缩进 setTabChangesFocus(bool)

14.2  设置缩进的距离 setTabStopWidth(int)

14.3  获取tab缩进的宽度 tabStopWidth()

15  打开超链接

16  信号的使用


1  QTextEdit基本操作

1.1  创建QTextEdit

1.2  占位提示文本

1.2.1  设置 setPlaceholderText()

当我们输入123后,占位字符会自动消失

1.2.2  获取 te.placeholderText()

2  内容设置

2.1  普通文本

2.1.1  设置普通文本 setPlainText()

QTextEdit也是有setText的,区别我们讲完富文本时再说

我们发现内容成功设置,并发现光标的默认位置为第0位

2.1.2  插入普通文本 insertPlainText()

我们保留上面的设置不同,现在插入内容456

由于我们设置文本后光标默认在第0位,所以我们插入时是从第0位插入456

2.1.3  获取普通文本 toPlainText()

在QTextEdit中没有text()这个方法了

使用 toPlainText()会返回一个字符串

2.2  富文本 html

由于我不会html这个语言,所以只能用一种例子

像这种他就是一级标题的意思

把1换成2就二级标题,在jupyter notebook中也奏效,你可以在下面这个cell中试一下

2.2.1  设置富文本 setHtml()

2.2.2  插入富文本 inserHtml()

2.2.3  获取富文本 te.toHtml()

结果就是下面这个cell的内容,由于太长了截不了图,我把它复制下来了,可以点开这个cell看结果

如果此时使用普通文本获取的获取结果

2.3  设置文本(自动判定) setText()

如果我们给setText()的字符串中包含富文本,setText()会进行自动判定

当然它也可以设置普通文本

2.4  追加文本 append()

追加文本的意思是在所有文本设置完毕后的下一行添加文本内容,内容可以位普通文本或是富文本,append()会自己进行识别

2.4.1  富文本

2.4.2  普通文本

2.5  清空文本 clear()

清空文本框中的所有内容

2.6  文本光标

我们编辑文本文件有两种方式,一种是像word的这种文本编辑器,另一种是使用文本光标,直接使用文本光标可以在文本文件显示之前进行操作

2.6.1  获取文本文档 document()

我们的QTextEdit()会自动连接一个QTextDocument

这个QTextDocument可以通过其方法对文档进行修改

我们可以在pycharm中输入QTextDocument然后Ctrl+左键看一下

它也是有创建,还有判断这些功能

那么我们一般的方式就是这样搞

咱们就不一一测试其中的功能了

2.6.2  获取文本光标 textCursor()

光标搞的方式和上面的获取文本文档相同

也是我先定义一个,然后用光标来搞

2.6.3  文本光标插入文本

2.6.3.1  插入普通文本 inserText()

这个方法是可以指定插入文字的格式的,它的参数是一个格式类

我们先创建它

这个时候我们可以ctrl + 左键点进去,里面有很多样式,我们测试

  • setToolTip()悬停时的提示
  • setFontFamily() 字体
  • setFontPointSize() 文字大小

之后把样式放在 insertText中

这个文本的字符格式在后面会有详细的讲解,此处知道能这么用就行

2.6.3.2  插入富文本 inserHtml()

我们在这里讲html另一个常用的语句,超链接

当前我们只是插入,现在点击这个baidu并不能将这个超链接打开,后面会讲到怎么设置为打开

2.6.4  光标插入图片 insertImage()

有四种使用方法

2.6.4.1  创建一个QTextImageFormat(),之后把QTextImageFormat放在insertImage中

  • setName()是选择图片
  • setWidth() 是指定宽度
  • setHeight() 是指定高度

2.6.4.2  在上面功能加入位置参数 insertImage(QTextImageFormat,QTextFrameFormat.Position)

前面咱们就不说了,说后面的QTextFrameFormat.Position

我们先这样写

按Ctrl+左键进入QTextFrameFormat

滚到最下面,会发现下面有枚举值,在position方法中就画框的两个是有用的,其余的没用

1是靠左,2是靠右

2.6.4.3  直接输入名称插入图片

运行之后我挪动了一下

2.6.4.4  在参数中放QImage,后面可以加一个可选的参数字符串

插入的字符串并不会在QTextEdit中显示

运行之后我拖动了一下

发现在文本框中并没有出现字符串

2.6.5  光标插入文本片段 insertFragment()

和直接介绍的插入文本功能相同

这个QTextDocumentFragment我们可以看到能用的功能也非常少

算__init__一共是六个功能

依次是:

  • fromHtml 设置富文本
  • fromPlainText 设置普通文本
  • isEmpty 是否为空
  • toHtml 获取富文本内容
  • toPlainText 获取普通文本内容

2.6.5.1  富文本

2.6.5.2  普通文本

2.6.6  插入列表

列表就是word中的

我们可以看到其中有两个方法 insert和create

insert的意思是将输入文字的后面加入列表的第一项,如果没有内容第一项就是空的

create的意思是将光标所在的一行全部变为列表的第一项,如果没有内容第一项就是空的

  • setIndent() 设置缩进,参数为缩进的个数
  • setNumberPrefix() 设置编号的前缀
  • setNumberSuffix() 设置编号的后缀
  • setStyle() 设置格式,格式就是下面这个图中的内容

为了好复制我把QTextListFormat.后面跟的样式都写下来

  • QTextListFormat.ListDisc 一个圆圈
  • QTextListFormat.ListCircle 一个空的圆圈
  • QTextListFormat.ListSquare 一个方块
  • QTextListFormat.ListDecimal 十进制按升序排列
  • QTextListFormat.ListLowerAlpha 小写拉丁字符按字母顺序排列
  • QTextListFormat.ListUpperAlpha 大写拉丁字符按字母顺序排列
  • QTextListFormat.ListLowerRoman 小写罗马数字(仅支持最多4999项)
  • QTextListFormat.ListUpperRoman 大写罗马数字(仅支持最大4999项)

有四种插入方法

一般我们这个方法会配合一个按钮使用,我们搞一个按钮再搞一个槽函数

  • 槽函数是可以放在调用的下面的

2.6.6.1  inserList(QTextListFormat.Style)

我们运行后输入123

之后我们无论将光标置于什么位置,我们点击一些按钮,结果都是一样的

2.6.6.2  createList(QTextListFormat.Style)

运行之后我们输入123,然后点击一下按钮,无论我们将光标置于何地,我们点击一下按钮,结果都是一样的

2.6.6.3  insertList(QTextListFormat)

这个函数我们应该这样用

我们首先实例化对象,然后设置前面的缩进为三个缩进,设置编号的前缀为<<,编号的后缀为>>,然后样式我们使用小写拉丁字符按字母顺序排列

  • 在设置前缀或后缀时,使用的样式为一个圈这种就没法设置

运行后我们输入123,然后点击按钮,无论我们的光标放在哪都是一样的

2.6.6.4  createList(QTextListFormat)

我们把上面的一段的最后一行改为create就可以了

运行后我们输入123,然后点击按钮

2.6.7  插入表格 inserTable()

现在我们插入两行三列的表格

  • 第一个参数是行,第二个参数是列

在这个表格中,我们是可以输入内容的

2.6.7.1  增加表格样式 QTextTableFormat()

在这个方法中我们还可以增加样式

我们首先应该创建一个QTextTableFormat()

在ttf中有很多的样式,我们测试常用的三个样式

  • setAlignment() 表格的位置
  • setCellPadding() 内间距
  • setCellSpacing() 外间距

红色的线是内间距,绿色的线是外间距

现在我们将这些参数传入insertTable()

表格出现在右侧,内边距为20,外边距为3

这个函数的返回值是插入的表格对象

我们在这个返回值中也可以追加很多操作

2.6.7.2  加入列appendColumns()

比如说加入列 appendColumns()

我们可以搞一个按钮,然后把appendColumns放入槽函数中

运行结果

我们点一下按钮

2.6.7.3  限制列宽 setColumnWidthConstrains()

我们还有一个常用的表格样式为限制列宽

用法就是按下面这么用

其中QTextLength是一个类

构造函数就是上面写的这样

第二个构造函数中的QTextLength.Tyep,在下方有枚举值

FixedLength 填充长度,比如我后面的float为50,就代表50个像素点的长度

太长了不好截图,我给他换行了

PercentageLength 百分比长度,比如我后面的float为50,就代表此cell占总表格长度的50%

这个如果还是50,50,50前面的格子会挤后面的格子

如果设置的几个数相加为100效果就比较显著

当前就是442分配

上面两种都是显示的时候长度就定死了,也不会改了,下面的这个是长度是变化的,如果使用这个输入内容后他会平均的分配长度

VariableLength 变化长度

使用这个后后面写什么数都没有用,但是一定要写一个

这个是它起始的样子

我们现在填满一行

当长度没超过QTextEdit时,他会变长

给它三个格子都填满后它会平均分配

2.6.8  插入文本块

在word中也是有实际应用的,在打开word是,它自动会插入一个文本块,然后咱们再填写内容

这里的文本块指的就是一段文字

我们现在先插入一个空的文本块

空的文本块其实就是一个回车

运行结果

  • 我们插入的文本块里面是不能有内容的,只能是一个回车

2.6.8.1  加入段落样式 QTextBlockFormat

如果想加入样式,咱们又要看一个新的类

我们找到set方法,测试下面这三个类

  • setAlignment 设置对齐方式
  • setBottomMargin 设置底部边距
  • setIndent 设置缩进

我们像下面这么搞

运行后,我们随便输入一点儿东西

2.6.8.2  加入字符样式 QTextCharFormat

这个类在之前介绍过,我们这次使用字体,字号,还有倾斜

  • setFontItalic() 是否设置倾斜,True为倾斜,False为不倾斜

我们现在将tcf置为block的参数

2.6.9  插入文本框架

文本框架中同样不可以放内容,它体现为插入一块区域

  • 插入时必须有参数

这个在实际应用是word的页边距

QTextFrameFormat我们上面提到过,当时只用了postion

现在咱们ctrl+左键点进去,发现里面也有很多可操作的方法

我们这次使用三个方法

  • setBorder() 设置边框宽度
  • setBorderBrush() 设置边框颜色
  • setRightMargin() 设置边框右边距

我们现在将他给到insertFrame()

运行完之后是这样的

我们在其中输入完多行文字是这样的

我们也可以通过文本文档的形式设置框架

我们也可以用tff来设置样式,为了分辨哪个是文本文档设置,哪个是光标设置,我们改一下颜色,光标设置的是红色的,文本文档设置的绿色的

我们将光标设置放在文本文档设置的下方

由于文本文档设置的框架是根框架,所以它总是最大的框架

我们当然也可以在两个框架中输入内容

2.6.10  设置和合并格式

2.6.10.1  设置块内的字符格式 setBlockCharFormat(QTextCharFormat)

QTextCharFormat这个类之前介绍过,这次再介绍两个新的功能

  • setFontOverline() 设置上划线
  • setFontUnderline() 设置下划线

我们将tcf作为参数给setBlockCharFormat

由于是对当前块的内容进行设置,所以我们搞一个按钮配合

运行后点击按钮,然后输入123

2.6.10.2  设置整个块的格式 setBlockFormat(QTextBlockFormat)

QTextBlockFormat这个变量我们之前接处过,我们设置中心对齐与两个缩进

我们还是把设置这个函数放在槽函数中

运行后我们输入很多a

然后点击一下按钮

发现当前块的格式已经发生改变

2.6.10.3  设置选中的字符格式 setCharFormat(QTextCharFormat)

QTextCharFormat我们还用原来的格式

setCharFormat()放在槽函数中

由于我们的功能为选中的字符格式,所以我们要在槽函数中重新获取光标

我们输入123,然后选中23

之后按一下按钮

发现2和3的样式已经改变

2.6.10.4  mergeBlockCharFormat(QTextCharFormat) 合并当前块的char格式

我们使用QTextCharFormat的另一个格式

  • setFontSkrikeOut() 删除线

我们先在槽函数中这样写

运行后我们点击一下按钮,然后输入123

现在我们加入融合

运行后我们点击按钮,之后输入123

2.6.10.5  mergeBlockFormat(QTextBlockFormat) 合并当前块格式

我们合并之前的tbf是这样的

我们要合并的tbf1是这样的

我们这里设置一个之前没设置过的

  • setNonBreakableLines() 设置不自动换行

槽函数我们这样写

运行之后我们点击一下按钮,然后输入

现在我们加入融合

运行之后我们点击按钮,然后输入

发现它不自动换行了,并且保留之前设置的样式

2.6.10.6  mergeCharFormal(QTextCharFormat) 合并当前字符格式

我们之前的tcf是这样的

我们现在要融合的样式是这样的

我们槽函数应该这样写

我们输入123,选中23,然后点击按钮

现在我们加入融合

我们输入123,选中23,然后点击按钮

2.6.11  获取格式与内容

这个我就不测了,之后用到的时候再说吧

我把它都写上吧,到时查找时好找

  • block() 获取光标所在的文本块
  • blockFormal() 获取光标所在的文本块格式
  • blockCharFormat() 获取光标所在的文本块字符格式
  • blockNumber() 获取光标所在的文本块编号
  • charFormal() 获取文本字符格式
  • currentFrame() 获取当前所在的框架
  • currentList() 获取当前所在的文本列表
  • currentTable() 获取当前的表格

想获取完块之后,我们可以使用其方法达到某种目的,比如我想获取这一文本块的内容

2.6.12  文本的选中和清空

2.6.12.1  选中

设置光标位置 setPosition()

我们在槽函数中搞更明显一些

我们现在将光标放在2的位置

我们此时发现点击按钮之后光标并没有移动,现在我们要再将光标反向设置回去

现在试一下就管用了

这个方法有一个可选参数移动模式

锚点:锚点就是光标的上一个位置,如果将锚点固定在原处,光标移动后会产生选中效果

我们在这个方法中默认是将锚点移动到与光标相同的位置

现在我们不移动锚点

输入123456后点击按钮

设置移动模式 movePosition()

第一个参数QTextCursor.MoveOperation有以下这么几种

  • QTextCursor.NoMove 将光标保持在原位
  • QTextCursor.Start 移至文档的开头。
  • QTextCursor.StartOfLine 移动到当前行的开头。
  • QTextCursor.StartOfBlock 移动到当前块的开头。
  • QTextCursor.StartOfWord 移动到当前单词的开头。
  • QTextCursor.PreviousBlock 移动到上一个块的开头。
  • QTextCursor.PreviousCharacter 移至上一个字符。
  • QTextCursor.PreviousWord 移到上一个单词的开头。
  • QTextCursor.Up 向上移动一行。
  • QTextCursor.Left 向左移动一个字符。
  • QTextCursor.WordLeft 向左移动一个单词。
  • QTextCursor.End 移到文档的末尾。
  • QTextCursor.EndOfLine 移动到当前行的末尾。
  • QTextCursor.EndOfWord 移到当前单词的末尾。
  • QTextCursor.EndOfBlock 移动到当前块的末尾。
  • QTextCursor.NextBlock 移动到下一个块的开头。
  • QTextCursor.NextCharacter 移动到下一个角色。
  • QTextCursor.NextWord 转到下一个单词。
  • QTextCursor.Down 向下移动一行。
  • QTextCursor.Right 向右移动一个角色。
  • QTextCursor.WordRight 向右移动一个单词。
  • QTextCursor.NextCell 移动到当前表中下一个表格单元格的开头。如果当前单元格是行中的最后一个单元格,则光标将移动到下一行中的第一个单元格。
  • QTextCursor.PreviousCell 移动到当前表内的上一个表格单元格的开头。如果当前单元格是行中的第一个单元格,则光标将移动到上一行中的最后一个单元格。
  • QTextCursor.NextRow 移动到当前表中下一行的第一个新单元格。
  • QTextCursor.PreviousRow 移动到当前表中上一行的最后一个单元格。

它使用的方式是这样使用的

第二个参数是是否移动锚点,第三个参数干什么用的不知道由于它这个是继承下来的方法可能在它的父类有用,而在这没有用

运行之后我们输入123456,然后点击按钮

发现按钮已经移动到行首

选择内容 select()

  • QTextCursor.Document 选中整个文档
  • QTextCursor.BlockUnderCursor 选择光标下的文本块。
  • QTextCursor.LineUnderCursor 选择光标下的文本行。
  • QTextCursor.WordUnderCursor 选择光标下的单词。如果光标未定位在可选字符串中,则不选择任何文本。

我们槽函数现在这样写

运行后我们输入hello world,然后点击按钮

2.6.12.2  文本内容的获取

  • selectedText() 获取选中的文本内容
  • selection() 获取选中语句
  • selectedTabelCell() 获取表格

获取选中的文本内容 selectedText()

我们给这个方法加入槽函数

运行后我们输入123456,给他们选中,然后点击一下按钮

selection() 获取选中语句

运行后我们输入123456,然后选中,之后点击一下按钮

我们可以对这个语句进行操作,比如

我们输入123456,然后选中23456,之后点击按钮

selectedTabelCell() 获取表格

获取表格前,我们得先有一个表格

我们现在插入一个两行三列的表格

我们的槽函数这样写

运行之后我们在表格中输入一点内容让他好看一点儿

我们自左上至右下选中表格

之后按一下按钮

它这四个数的意思是

(选中的第一行是第几行,选中的总行数,选中的第一列是第几列,选中的总列数)

比如说我们现在这样选

2.6.12.3  选中位置的获取

  • selectionStart() 获取开始点
  • selectionEnd() 获取终止点

我们现在选择234,然后按一下按钮

2.6.12.4  清空和判定是否选中

清空选中 clearSelection()

我们在槽函数中这样写

我们输入123456后,选中它们

然后点击按钮

发现取消了选中

判断是否选中了文本 hasSelection()

槽函数

运行之后我们输入123456,然后不选中直接点一下按钮

然后我们选中他们,然后点一下按钮

出选中的文本 removeSelectedText()

槽函数

运行后,我们输入123,然后选中23

之后点击一下按钮

2.6.13  删除内容

2.6.13.1  删除后一个字符 deleteChar()

槽函数中这样写

运行后我们输入123456

将光标放在5的后面,然后点一下按钮

发现6被删除

选中34,之后在点击一下按钮

发现34被删除

2.6.13.2  删除前一个字符 deletePreviousChar()

槽函数应该这样写

运行后我们输入123456,然后点击一下按钮

发现6被删除

之后我们选中34,然后点击按钮

发现34被删除

2.6.14  位置相关

2.6.14.1  是否在文本块末尾 atBlockEnd()

槽函数这样写

运行之后我们直接点击一下按钮

然后在文本框中输入123,再点击一下按钮

之后我们将光标移动到2的后面,然后点击一下按钮

2.6.14.2  是否在文本块开始 atBlockStart()

我们槽函数应该这样写

运行之后我们点击一下按钮

输入123后我们点击一下按钮

把光标放在2后面我们点击一下按钮

2.6.14.3  是否在文档末尾 atEnd()

我下面就不按上面这样试了,太长

槽函数

输入123后我们点击一下按钮

2.6.14.4  是否在文档开始 atStart()

槽函数

运行后我们直接点击按钮

输入123后我们将光标放在1的前面,之后再点击一下按钮

2.6.14.5  返回光标在第几列 columnNumber()

槽函数我们这样写

我们这样输入,然后把光标放在6的后面

点一下按钮

之后我们在6的后面输入22

点一下按钮

2.6.14.6  光标位置 position()

槽函数

这个光标位置是不分块的,有几个算几个

我们先输入123,然后点击一下按钮

之后我们回车输入456789

按一下按钮

咱们这个位置是从零开始数的,第一位是0

2.6.14.7  光标在文本块中的位置 positionBlock()

槽函数

运行之后我们这样输入

点一下按钮

2.6.15  开始和结束编辑标识

我们在撤销的时候,默认为撤销上一步操作

比如我现在输入123,然后按下回车

我们现在撤销,发现回车被撤销掉了

我们现在想一步给所有东西都撤销掉,我们就应该使用开始与结束标识了

  • 开始标识 beginEditBlock()
  • 结束标识 endEditBlock()

为了好展示我们搞两个按钮,连接两个槽函数

当前我们输入一个1,然后点击开始编辑

此时再输入23,再按一下回车,发现在文本框中没有显示,按下回车时,光标也不见了

现在我们点击结束编辑

发现该显示的文本显示出来了,然后我们右键撤销

文本框回到了最开始输入1的状态

3  自动格式化

3.1  设置 setAutoFormatting()

它的参数是 QTextEdit.AutoFormatting

  • QTextEdit.AutoNone 不做任何自动格式化
  • QTextEdit.AutoBulleList 自动创建项目符号列表
  • QTextEdit.AutoAll 应用所有自动格式

3.1.1  QTextEdit.AutoNone 不做任何自动格式化

这个是默认值,对输入文本没有任何影响

3.1.2  QTextEdit.AutoBulleList 自动创建项目符号列表

这里的自动是在已有列表的前提下自动创建

当我们没有列表时,我们运行后按下*号

会这样

3.1.3  QTextEdit.AutoAll 应用所有自动格式

根上面的那个功能一样

3.2  获取 autoFormatting()

它返回的这样的一个类,这个类怎么用我不知道

我这个类的下面我们再一次看到了这种标识

这种标识的意思是下面的方法都为静态函数,静态函数有个特点是不返回self

4  软换行模式

4.1  设置换行模式

它的参数是这个 QTextEdit.LineWrapMode

4.1.1  不换行 QTextEdit.NoWrap

4.1.2  以控件的宽度为限制换行 QTextEdit.WidgetWidth

默认情况下会保持单词的完成性

我们也可以不保持单词的完整性

4.1.3  固定列宽换行 QTextEdit.FixedPixelWidth

这个函数要配合setLineWrapColumnOrWidth()

现在就是我每行只允许存在100像素的内容

我们这100像素是可以获取的

4.1.4  固定列数换行 QTextEdit.FixedColumnWidth

这个函数我们还是配合 setLineWrapColumnOrWidth()

我们现在括号里的是列数而不是列宽了

我们现在每行搞8列

我们也可以获取列数

4.2  设置单词换行模式 setWordWrapMode()

只要设置自动换行就涉及到单词软换行,及4.1.2,4.1.3,4.1.4都可以和单词软换行配合

它的参数是这个QTextOption.WrapMode

我们下面就用te.setLineWrapMode(QTextEdit.WidgetWidth)来配合

4.2.1  QTextOption.NoWrap 不换行了

4.2.2  保持单词完整性 QTextOption.WordWrap

上面介绍的三个换行默认是这个参数

4.2.3  手动换行 QTextOption.ManualWrap

效果和QTextOption.NoWrap(不换行)相同

4.2.4  不保持单词完整性 QTextOption.WrapAnywhere

我们可以发现这个you被截断了

4.2.5  尽量赶在单词边界换行否则就任意位置换行QTextOption.WrapAtWordBoundaryOrAnywhere

这个条件我没碰上过,不过一般应该也不用

4.3  获取换行模式

会返回一个枚举值,这个还是挺有用的,我把所有值对应的模式对应出来

  • 0 - QTextEdit.NoWrap 没有软换行
  • 1 - QTextEdit.WidgetWidth 以控件的宽度为限制
  • 2 - QTextEdit.FixedPixelWidth 固定行宽
  • 3 - QTextEdit.FixedColumnWidth 固定列数

4.4  获取单词换行模式

  • 0 - QTextOption.NoWrap 不换行了
  • 1 - QTextOption.WordWrap 保持单词完整性
  • 2 - QTextOption.ManualWrap 手动换行
  • 3 - QTextOption.WrapAnywhere 不保持单词完整性
  • 4 - QTextOption.WrapAtWordBoundaryOrAnywhere 尽可能赶在单词的边界, 否则就在任意位置换行

5  覆盖模式

这个功能就相当于开启记事本或word这种编辑文本的软件后,点击了一下键盘的instert键

5.1  设置 setOverwriteMode()

运行后我们输入123,然后将光标置于2和3之间

现在我们输入4

发现4覆盖了3

5.2  获取 overwriteMode()

6  文本光标设置

这个我们一般是配合覆盖模式使用的,当覆盖模式开启时光标一般会变得更宽

6.1  设置文本光标宽度 setCursorWidth()

我们将光标设置为20像素的宽度

6.2  获取文本光标宽度 cursorWidth()

6.3  获取文本光标的矩形区域 cursorRect()

我们现在获取光标的初始矩形区域

光标的初始矩形区域为(0,0,20,10)

起始点为(0,0),矩形长度为20,宽度为10

7  对齐方式

7.1  设置 setAlignment()

常用的对齐方式有三种

  • Qt.AlignLeft 左对齐
  • Qt.AlignRight 右对齐
  • Qt.AlignCenter 居中对齐

不常用的在70.QLabel 1.2对齐中有展示

7.1.1  左对齐 Qt.AlignLeft

7.1.2  右对齐 Qt.AlignRight

7.1.3  居中对齐 Qt.AlignCenter

7.2  获取 alignment()

它获取的是Alignment这个对象

8  字体格式

8.1  字体类型

8.1.1  设置 setFontFamily()

运行后我们输入123

8.1.2  获取 fontFamily()

8.1.3  获取所有可用的字体类型 QFontDialog.getFont()

运行之后我们可以看到所有的字体类型

8.2  字体样式

8.2.1  字体粗细

8.2.1.1  设置 setFontWeight()

可选参数如下

  • QFont.Thin
  • QFont.ExtraLight
  • QFont.Light
  • QFont.Normal
  • QFont.Medium
  • QFont.DemiBold
  • QFont.Bold
  • QFont.ExtraBold
  • QFont.Black

它这些参数是由上至下一点点变粗的,我们先看一下最细的

再看一下最粗的

除了这个字符串外,我们也可以用数字给参数,对应数字如下

  • 0 - QFont.Thin
  • 1 - QFont.ExtraLight
  • 2 - QFont.Light
  • 3 - QFont.Normal
  • 4 - QFont.Medium
  • 5 - QFont.DemiBold
  • 6 - QFont.Bold
  • 7 - QFont.ExtraBold
  • 8 - QFont.Black

8.2.1.2  获取 fontWeight()

这个函数会获取一个int

对应的整形和设置时的对应相同

8.2.2  字体斜体

8.2.2.1  设置 setFontItalic()

8.2.2.2  获取 fontItalic()

8.3  字体尺寸

8.3.1  设置 setFontPointSize()

这个需要一个float,如果输入成int也可以

8.3.2  获取 fontPointSize()

发现会返回一个浮点类型数据

8.4  字体下划线

8.4.1  设置 setFontUnderline()

8.4.2  获取 fontUnderline()

8.5  统一设置 QFont

8.5.1  设置 setCurrentFont(QFont)

这个函数需要传入一个QFont对象

我们Ctrl+左键点击QFont后,我们可以在其中设置相应的属性

我们测试一下它本身的构造函数,与添加删除线

构造函数的参数依次为:

  • 字体
  • 大小
  • 加粗程度
  • 是否倾斜

8.5.2  获取 currentFont()

它会获取到QFont()这一类型的变量

9  颜色设置

这里面关于设置的方法参数都为QColor

QColor()括号中的内容对应R,G,B三通道的数值

9.1  文本背景颜色

9.1.1  设置 setTextBackgroundColor()

9.1.2  获取 textBackgroundColor()

它会获取到当前的QColor对象

9.2  文本颜色

9.2.1  设置 setTextColor()

9.2.2  获取 textColor()

它会获取到当前的QColor对象

10  当前字符格式

这个在光标设置时有使用过tcf的方式,我们在这讲的目的是,直接在QTextEdit中也能用

10.1  设置当前字符格式

设置当前一般配合槽函数使用,当我点击按钮后格式才会生效,而不是设置的格式一直可以生效

我们在这里也介绍一下tcf所有的常用设置

  • 统一设置

    • setFont(QFont) 统一设置
    • font() -> QFont 获取QFont
  • 字体家族
    • setFontFamily(family_str) 设置字体家族
    • fontFamily() -> str 获取字体家族
  • 字体大小
    • setFontPointSize(float) 设置字号
    • fontPointSize() -> float 获取字号
  • 字体粗细
    • setFontWeight(int) 设置粗细
    • fontWeight() -> int 获取粗细
  • 字体上划线
    • setFontOverline(bool) 设置是否加入字体上划线
    • fontOverline() -> bool 获取是否加入了字体上划线
  • 字体中划线
    • setFontStrikeOut(bool) 设置是否加入字体中划线
    • fontStrikeOut() -> bool 获取是否加入了字体中划线
  • 字体下划线
    • setFontUnderline(bool) 设置是否加入字体下划线
    • fontUnderline() -> bool 获取是否加入了字体下划线
  • 字体大小写
    • setFontCapitalization(QFont.Capitalization) 统一设置

      • QFont.Capitalization 有五种枚举值

        • QFont.MixedCase 正常的文本呈现选项,不应用大写更改
        • QFont.AllUppercase 所有字符都是大写
        • QFont.AllLowercase 所有字符都是小写
        • QFont.SmallCaps 所有字符以个头小的大写出现
        • QFont.Capitalize 每个单词首字母大写
    • fontCapitalization() -> QFont.Capitalization 获取QFont.Capitalization
  • 颜色
    • setForeground(QColor()) 设置颜色
  • 超链接
    • setAnchorHref("http://www.itlike.com") 设置超链接
    • anchorHref() -> str 获取超链接

在上面我们没使用过的方法为 字体大小写,颜色和超链接,我们下面测试一下

10.1.1  字体大小写

10.1.1.1  设置 setFontCapitalization()

其中最男理解的是QFont.AllUppercase所有字符都是大写和QFont.SmallCaps,我们现在来试一试

我们先看QFont.AllUppercase 所有字符改为大写

再看 QFont.SmallCaps 小个的大写

我们明显发现这个方法明显比上面那个方法的字符大小要小

10.1.1.2  获取 fontCapitalization()

获取的值为枚举值,枚举值依次对应

  • 0 - QFont.MixedCase 正常的文本呈现选项,不应用大写更改
  • 1 - QFont.AllUppercase 所有字符都是大写
  • 2 - QFont.AllLowercase 所有字符都是小写
  • 3 - QFont.SmallCaps 所有字符以个头小的大写出现
  • 4 - QFont.Capitalize 每个单词首字母大写

10.1.2  字体颜色

10.1.3  超链接 setAnchorHref

这个功能准确来讲是设置href的锚点

运行后在文本框内没有任何显示

我们点击print的结果发现可以进入百度

11  常用编辑操作

我们这一讲的目的是用代码来替代操作

常用的编辑操作如下

  • copy() 复制
  • paste() 粘贴
  • canPaste() -> bool 查看能否粘贴
  • setUndoRedoEnabled(bool) 设置是否可以撤销和重做
  • redo() 重做
  • undo() 撤销
  • selectAll() 全选
  • find() 查找

我们在上面没有用过的功能是canPaste(),selectAll()与find()

11.1  canPaste() 查看能否粘贴

在我们不进行任何操作时,查看能否粘贴

11.2  selectAll() 全选

这个得搞一个槽函数

我们输入123,然后点击一下按钮

11.3  find() 查找

find()函数有两个参数,第一个参数为要查找的内容,第二个参数为查找的方式

如果我们只写入参数 查找的内容,我们默认的查找方式是向前(右)搜索,且不区分大小写的

我们还是再刚刚的槽函数中搞

我们输入hello后,点击按钮

发现没有任何反应

我们现在把光标置为第一位

点击一下按钮

发现h已被选中

我们现在看非默认的查找方式

查找方式所有参数如下

  • QTextDocument.FindBackward 向后(左)搜索
  • QTextDocument.FindCaseSensitively 区分大小写
  • QTextDocument.FindWholeWords 查找匹配完整的单词

我就写一下该怎么用,这三个我就不试了

这里面就涉及一个问题,我现在想想后(左)搜索且我现在想区分大小写且我想查找匹配完整的单词,我应该这样写

上面的三个值可以 按位或 运算

这个find函数有一个返回值,如果找到了它会返回一个True,没找到会返回False

12  滚动至锚点

12.1  设置锚点

格式按这样写就行

12.2  滚动动作

我们搞一个槽函数,然后把scrollToAnchor()放在里面

我们整段的代码是这样的

运行之后是这样的

我们发现我们插入的普通文本也变成富文本的样式了,具体为什么我目前不知道

现在我们点击一下按钮

发现回到了锚点处

如果我们想把b都变为普通文本,我们可以这样写

这样b的样式就为普通文本了

13  只读设置

13.1  设置 setReadOnly()

运行之后我们发现不能对文本框中文本进行编辑了

在只读状态下我们依然可以使用insertPlainText等代码的方式来插入文本

13.2  获取 isReadOnly()

14  Tab控制

14.1  设置Tab功能为改变焦点,而不是缩进 setTabChangesFocus(bool)

  • False为缩进,True为改变焦点,该方法默认参数为False

由于涉及到焦点,我们先搞两个控件

先运行一下

现在我们按一下tab

发现它缩进了

之后我们改变tab的功能

运行后的默认状态

我们现在按一下tab

14.2  设置缩进的距离 setTabStopWidth(int)

  • 该方法的参数单位为像素
  • 该方法默认参数为80
  • 该方法必须是tab是缩进状态才能看出效果

我们首先看一下它默认的缩进距离

我们现在将其设置为20

14.3  获取tab缩进的宽度 tabStopWidth()

15  打开超链接

我们重写了按下鼠标的方法

上面这个代码逻辑是这样的,我们首先获取鼠标按下的位置,之后我们获取该位置文本有的url,之后我们把这个url打开

之后我们实例化该类,然后加入超链接

运行后我们点击一下超链接

网页确实被打开了

在上面这个代码中,我们有可能会捕获空置复制给url,这个时候我们用try要更好一点

为了不让重写丧失之前的功能,我们使用super()继承之前的方法

16  信号的使用

QTextEdit的全部信号如下

  • textChanged() 文本内容改变信号
  • selectionChanged() 选中内容发生改变信号
  • cursorPositionChanged() 光标位置改变信号
  • currentCharFormatChanged(QTextCharFormat) 字符格式改变时信号,可以传递字符格式参数
  • copyAvailable() 复制可用信号
  • redoAvailable() 重做可用信号
  • undoAvailable() 撤销可用信号

  • 复制,重做,撤销可以用,可以传递bool量,True为可用,False为不可用

我们把所有信号都绑在文本框上

由于涉及到一个改变字体的信号,我们再搞一个改变字体的按钮

运行初始界面

我们现在输入一个1

我们现在选中1

我们现在点击改变字体按钮

现在我们右键点击撤销

现在我们就测试完了QTextEdit的七种信号

39.QTextEdit相关推荐

  1. Python Qt GUI设计:QLineEdit和QTextEdit文本框类(基础篇—13)

    目录 1.QLineEdit文本框类 2.QTextEdit文本框类 QLineEdit和QTextEdit都是文本框类,QLineEdit类是单行文本框控件,可以输入单行字符串.QTextEdit类 ...

  2. 剑指offer:面试题39. 数组中出现次数超过一半的数字

    题目:面试题39. 数组中出现次数超过一半的数字 数组中有一个数字出现的次数超过数组长度的一半,请找出这个数字. 你可以假设数组是非空的,并且给定的数组总是存在多数元素. 示例 1: 输入: [1, ...

  3. 【蓝桥java】递归基础之39级台阶

    题目: 小明刚刚看完电影<第39级台阶>.离开电影院的时候,他数了数礼堂前的台阶数,恰好是39级! 站在台阶前,他突然又想着一个问题: 如果我每一步只能迈上1个或2个台阶.先迈左脚,然后左 ...

  4. 39个超实用jQuery实例应用特效

    2019独角兽企业重金招聘Python工程师标准>>> 1.Contextual Slideout:上下文滑动特效 2.Revealing Photo Slider:图片幻灯片特效 ...

  5. appium+python自动化45-夜神模拟器连不上(adb server version (36) doesn't match this client (39); killing...)...

    前言 最新下了个最新版的夜神模拟器,然后adb devices发现连不上模拟器了,报adb server version (36) doesn't match this client (39); ki ...

  6. 水母智能联合蚂蚁森林、犀牛智造等,用AI助力非遗出圈,39万人开工得“福”

    如今过年越来越有年味了,许多淡出已久的中国传统年俗,以更有趣.更年轻新潮.更科技的方式回到了大家身边.集五福.写福字.贴福字,挂福饰品,当然还有接"福袋"!人工智能实现智能设计已经 ...

  7. 3年多亏33亿,又一AI独角兽再冲刺上市,39岁天才科学家即将坐拥首个IPO?

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 来源丨AI前线 编辑丨极市平台 导读 IPO 申请"失效& ...

  8. 还只是 39 岁!一个天才年轻程序员的陨落

    公众号关注 "视学算法" 设为 "星标",DLCV消息即可送达! 转自:程序人生,作者:年素清 说起 Cloudflare,可谓是大名鼎鼎,它承担了互联网中的 ...

  9. 在参加了39场Kaggle比赛之后,有人总结了一份图像分割炼丹的「奇技淫巧」

    点击上方"视学算法",选择加"星标"或"置顶" 重磅干货,第一时间送达 本文转载自:机器之心 一个经历了 39 场 Kaggle 比赛的团队 ...

最新文章

  1. PCL采样一致性算法
  2. python对数运算符号_科学网—Python中算数运算符之注意及np.logspace - 张伟的博文...
  3. 知识图谱公开课 | 详解事件抽取与事件图谱构建
  4. 古巴比伦乘法_古巴:为生产做准备
  5. MAC 设置$PATH 关闭terminal后就失效 解决方案
  6. mpvue微信小程序动画_mpvue小程序以及微信直播踩坑总结
  7. 恭喜你们微软论坛版主成为百度知道专家
  8. java unsafe cas_java并发Unsafe和CAS
  9. 杀毒软件-试用卡巴斯基全方位安全软件
  10. K3CLOUD业务系统编码规则设置
  11. k开头的英文单词计算机专业,带有k的英语单词
  12. Server 2012 R2 安装 Microsoft Windows CredSSP 远程执行代码漏洞补丁
  13. Dfam:真核生物转座元件数据库
  14. OpenCV实战2——进行颜色检测(HSV颜色空间)和分割的隐形斗篷
  15. 常用PC,移动浏览器User-Agent大全
  16. 基于Uniapp实现的在线投票App问卷调查
  17. Codeforces Round #772 (Div. 2) CF1635ABCDEF
  18. Dom4jDemo应用-保存手机信息
  19. 10G DWDM SFP+ Tunable可调光模块与常规DWDM光模块的区别
  20. Java深入学习系列之值传递Or引用传递?

热门文章

  1. 运维工程师常见40道面试题必会
  2. 运动蓝牙耳机哪个品牌好,推荐六款运动跑步耳机
  3. c语言 字符串数组 初始化,C 字符串数组初始化问题
  4. codewhy-vue2.0移动电商项目回顾
  5. 信息论入门:信息守恒定律与纠错码
  6. (4)机器学习--回归模型
  7. ie浏览器、低版本火狐浏览器兼容问题汇总
  8. 国内个人博客程序大集合
  9. Android加载Gif动画android-gif-drawable的使用
  10. .NET WPF教程(21)——DataGrid示例