Qt6.5类库详解:全面解析QTextEdit文本编辑控件

01 QTextEdit介绍

QTextEdit是一个文本编辑控件类,用于编辑和显示纯文本和富文本。

  • QTextEdit的主要功能和特点:

富文本编辑与显示:QTextEdit支持富文本格式,可以显示和编辑带有各种字体、颜色和文字格式的文本。

处理大型文档:QTextEdit经过优化,可以处理大型文档并快速响应用户输入,适用于编辑长篇文章或大量文本。

HTML和Markdown支持:QTextEdit支持使用HTML风格的标签或Markdown格式的富文本格式化。

段落和字符级别控制:QTextEdit文本是基于段落和字符进行控制的,每个段落和字符都可以有自己的格式属性,如字体和颜色等。

显示图像、列表和表格:QTextEdit还可以显示图像、列表和表格,丰富文本编辑内容。

提供占位文本提示:QTextEdit支持设置占位文本,当编辑框内无内容时,可以显示预设的提示信息。

QTextEdit是一个功能丰富、性能优化的文本编辑控件,适用于各种需要处理文本的场合。

  • 如何使用QTextEdit:

头文件:#include <QTextEdit>

cmake:find_package(Qt6 REQUIRED COMPONENTS Widgets)

target_link_libraries(mytarget PRIVATE Qt6::Widgets)

qmake:QT += widgets

继承于:QAbstractScrollArea

02 QTextEdit默认风格显示例子

#include <QTextEdit>
// 创建 QTextEdit 控件。
m_pTextEdit = new QTextEdit(this);
m_pTextEdit->setGeometry(30, 30, 380, 128);
m_pTextEdit->setPlainText("这是一段 QTextEdit 示例文本。");

03 QTextEdit信号

// 当显示文本改变时,发射该信号。
void textChanged()
// 当允许撤销操作状态改变时,发射该信号;true表示允许撤销。
void undoAvailable(bool b)
// 当允许重做操作状态改变时,发射该信号;true表示允许重做。
void redoAvailable(bool b)
// 当前文本字符格式改变时,发射该信号。
void currentCharFormatChanged(const QTextCharFormat &format)
// 当允许复制操作状态改变时,发射该信号;true表示允许复制。
void copyAvailable(bool b)
// 当选择文本改变时,发射该信号。
void selectionChanged()
// 当前光标位置改变时,发射该信号。
void cursorPositionChanged()

04 QTextEdit属性和状态

  • placeholderText占位符文本:

占位符文本一般用于在用户未输入任何内容时显示一些提示信息。

// 访问函数。
QString placeholderText() const
void setPlaceholderText(const QString &placeholderText)

/**** 例子: ****/
m_pTextEdit->setPlaceholderText("请输入备注说明。");

  • isReadOnly是否只读模式:

false:编辑模式;文本编辑器。(默认)

true:只读模式;文本查看器。

// 访问函数。
bool isReadOnly() const
void setReadOnly(bool b)

/**** 例子 ****/
m_pTextEdit->setReadOnly(true);
  • textInteractionFlags文本交互标识:

textInteractionFlags属性用来指定QTextEdit控件如何与用户输入交互。

Qt::TextInteractionFlags宏定义如下:

Qt::NoTextInteraction 0 表示没有任何文本交互。

Qt::TextSelectableByMouse 1 表示可以通过鼠标选择文本。

Qt::TextSelectableByKeyboard 2 表示可以通过键盘选择文本。

Qt::LinksAccessibleByMouse 4 表示可以通过鼠标点击来访问链接。

Qt::LinksAccessibleByKeyboard 8 表示可以通过键盘来访问链接。

Qt::TextEditable 16 表示可以接受用户输入并编辑文本。

textInteractionFlags默认值跟QTextEdit是否只读模式有关(isReadOnly为true)。

// 访问函数。
void setTextInteractionFlags(Qt::TextInteractionFlags flags)
Qt::TextInteractionFlags textInteractionFlags() const

/**** 例子: ****/
m_pTextEdit->setTextInteractionFlags(Qt::TextSelectableByMouse | Qt::LinksAccessibleByMouse | Qt::TextSelectableByKeyboard);
  • autoFormatting自动格式化属性:

autoFormatting属性用于控制QTextEdit文本编辑自动格式化功能。

QTextEdit::AutoFormatting宏定义如下:

QTextEdit::AutoNone 禁用格式化功能。(默认)

QTextEdit::AutoBulletList 自动格式化项目符号列表功能。

QTextEdit::AutoAll 自动格式化所有。

// 访问函数。
QTextEdit::AutoFormatting autoFormatting() const
void setAutoFormatting(QTextEdit::AutoFormatting features)
  • tabChangesFocus制表符(Tab)切换焦点:

false:按下Tab键在文本框输入制表符号。(默认)

true:按下Tab键切换文本框焦点。

// 访问函数。
bool tabChangesFocus() const
void setTabChangesFocus(bool b)
  • tabStopDistance制表符停止间隔距离:

tabStopDistance用来设置在编辑框里面按下TAB键,插入制表符间隔距离多少像素。

默认80。

// 访问函数。
qreal tabStopDistance() const
void setTabStopDistance(qreal distance)
  • isUndoRedoEnabled是否启用撤销重做:

true:启用撤销重做功能。(默认)

false:禁用撤销重做功能。

// 访问函数。
bool isUndoRedoEnabled() const
void setUndoRedoEnabled(bool b)

/**** 例子: ****/
m_pTextEdit->setUndoRedoEnabled(false);    // 设置禁用撤销重做功能。
  • lineWrapColumnOrWidth换行列数或宽度:

0:表示不处理。(默认)

>0:表示文本超过行的列数或宽度自动换行。

// 访问函数。
int lineWrapColumnOrWidth() const
void setLineWrapColumnOrWidth(int w)

/**** 例子: ****/
m_pTextEdit->setLineWrapColumnOrWidth(80);    // 设置每行最多显示80个字符。
  • lineWrapMode换行模式:

lineWrapMode用于指定QTextEdit编辑器中的换行模式。

QTextEdit::LineWrapMode宏定义如下:

QTextEdit::NoWrap 0 不会自动换行,会一直显示到文本编辑器的末尾。

QTextEdit::WidgetWidth 1 会在文本编辑器窗口宽度允许的范围内自动换行。(默认)

QTextEdit::FixedPixelWidth 2 配合lineWrapColumnOrWidth属性自动换行。

QTextEdit::FixedColumnWidth 3 配合lineWrapColumnOrWidth属性自动换行。

// 访问函数。
QTextEdit::LineWrapMode lineWrapMode() const
void setLineWrapMode(QTextEdit::LineWrapMode mode)
  • wordWrapMode换行模式:

wordWrapMode用于指定文本的换行模式。

QTextOption::WrapMode宏定义如下:

QTextOption::NoWrap 0 文本不会自动换行,会一直显示到文本编辑器的末尾。

QTextOption::WordWrap 1 文本会在单词边界处自动换行。

QTextOption::ManualWrap 2 与QTextOption::NoWrap相同,文本不会自动换行。

QTextOption::WrapAnywhere 3 文本可以在一行上的任何位置自动换行。

QTextOption::WrapAtWordBoundaryOrAnywhere 4 如果可能,文本会在单词边界处自动换行;否则,会在行的任何适当位置自动换行。(默认)

// 访问函数
QTextOption::WrapMode wordWrapMode() const
void setWordWrapMode(QTextOption::WrapMode policy)

/**** 例子: ****/
m_pTextEdit->setWordWrapMode(QTextOption::WordWrap);    // 设置按词换行。
  • overwriteMode是否覆盖模式:

true:覆盖模式;当用户在文本编辑器中输入文本时,新的文本将覆盖旧的文本。

false:插入模式;新的文本将附加到旧的文本的末尾。(默认)

// 访问函数
bool overwriteMode() const
void setOverwriteMode(bool overwrite)
  • cursorWidth光标宽度:

默认1像素。

// 访问函数。
int cursorWidth() const
void setCursorWidth(int width)
  • acceptRichText是否接受富文本:

true:允许输入和显示富文本。包含不同样式和格式的文本,例如粗体、斜体、下划线、颜色等。(默认)

false:只允许输入纯文本。

// 访问函数。
bool acceptRichText() const
void setAcceptRichText(bool accept)

05 QTextEdit右键菜单

  • 默认右键菜单效果:

06 QTextEdit字符格式化属性

  • fontPointSize字体大小:
// 访问函数。
qreal fontPointSize() const
void setFontPointSize(qreal s)
  • fontFamily字体家族:
// 访问函数。
QString fontFamily() const
void setFontFamily(const QString &fontFamily)
  • fontWeight字体粗细:
// 访问函数。
int fontWeight() const
void setFontWeight(int w)
  • fontUnderline下划线:
// 访问函数。
bool fontUnderline() const
void setFontUnderline(bool b)
  • fontItalic斜体:
// 访问函数。
bool fontItalic() const
void setFontItalic(bool b)
  • textColor文本颜色:
// 访问函数。
QColor textColor() const
void setTextColor(const QColor &c)

/**** 例子: ****/
m_pTextEdit->setTextColor(QColor(255, 0, 0));    // 设置文本显示为红色。
  • textBackgroundColor背景颜色:
// 访问函数
QColor textBackgroundColor() const
void setTextBackgroundColor(const QColor &c)
  • currentFont当前字体:
// 访问函数。
QFont currentFont() const
void setCurrentFont(const QFont &f)
  • alignment文本对齐方式:
// 访问函数。
Qt::Alignment alignment() const
void setAlignment(Qt::Alignment a)

/**** 例子: ****/
m_text_edit->setAlignment(Qt::AlignLeft|Qt::AlignVCenter);    // 设置文本靠左,并且垂直居中显示。

07 QTextEdit文本字符格式操作

  • QTextCharFormat文本字符格式类介绍:

QTextCharFormat是Qt中用于表示文本字符格式的类。这个类的主要功能是用于设置和管理文本的字体、颜色、样式和其他属性。

以下是QTextCharFormat类的一些常用属性和方法:

setFont(const QFont &font):设置字体。

setFontFamily(const QString &family):设置字体家族。

setFontPointSize(qreal size):设置字体大小。

setFontWeight(int weight):设置字体粗细。

setFontItalic(bool italic):设置字体是否倾斜。

setFontUnderline(bool underline):设置字体是否带下划线。

setFontStrikeOut(bool strikeOut):设置字体是否带删除线。

setForeground(const QBrush &brush):设置前景色(文本颜色)。

setBackground(const QBrush &brush):设置背景色。

setTextOutline(const QPen &pen):设置文本描边样式。

setUnderlineColor(const QColor &color):设置下划线颜色。

setVerticalAlignment(Qt::Alignment alignment):设置文本垂直对齐方式。

setAnchor(bool anchor):设置是否为锚点。

setAnchorHref(const QString &href):设置锚点链接。

setAnchorName(const QString &name):设置锚点名称。

setAnchorNames(const QStringList &names):设置锚点名称。

setToolTip(const QString &toolTip):设置工具提示。

setFontCapitalization(QFont::Capitalization caps):设置字母大小写。

setFontLetterSpacing(qreal spacing):设置字母间距。

  • QTextEdit文本字符格式函数:

// 设置当前光标(包括选择文本)的字符格式。
void setCurrentCharFormat(const QTextCharFormat &format)
// 返回当前光标(包括选择文本)的字符格式。
QTextCharFormat currentCharFormat() const
// 合并当前光标(包括选择文本)的字符格式。
void mergeCurrentCharFormat(const QTextCharFormat &modifier)
  • QTextEdit文本字符格式显示示例:

以下是一个示例代码,演示如何使用QTextEdit和setCurrentCharFormat()函数来设置当前选中文本的字符格式:

#include <QTextEdit>
// 创建 QTextEdit 控件。
m_pTextEdit = new QTextEdit(this);
m_pTextEdit->setGeometry(30, 30, 380, 128);

// 创建一个新的字符格式。
QTextCharFormat charFormat;
charFormat.setFontFamilies(QStringList() << "Arial");
charFormat.setFontPointSize(12);
charFormat.setForeground(QBrush(Qt::green));
charFormat.setFontWeight(QFont::Bold);

// 将字符格式应用到当前光标所指向的文本上。
m_pTextEdit->setCurrentCharFormat(charFormat);

// 显示一段文本。
m_pTextEdit->setPlainText("这是一段 QTextEdit 示例文本。");

08 QTextEdit文本操作

  • 文本内容管理:

// 返回文本。
QString toPlainText() const
// 返回HTML文本。
QString toHtml() const

// 设置文本。
void setPlainText(const QString &text)
// 设置HTML文本。
void setHtml(const QString &text)
// 设置文本。(支持纯文本或HTML文本)
void setText(const QString &text)

// 在光标位置插入文本。
void insertPlainText(const QString &text)
// 在光标位置插入HTML文本。
void insertHtml(const QString &text)

// 在文档结尾添加文本。
void append(const QString &text)
  • 剪贴板快捷操作:

// 剪切选择文本内容到剪贴板。
void cut()
// 复制选择文本内容到剪贴板。
void copy()
// 返回是否允许粘贴剪贴板文本内容到光标位置。
bool canPaste() const
// 插入剪贴板文本内容到当前光标位置,同时删除选择文本。
void paste()
  • 放大缩小操作:

zoomIn放大、zoomOut缩小函数,取决于QTextEdit字体大小和其他属性设置。

// 访问函数
void zoomIn(int range = 1)
void zoomOut(int range = 1)
  • QTextEdit快捷操作函数

// 清空文本。
void clear()
// 选择全部文本。
void selectAll()
// 撤销上一次操作。
void undo()
// 重做上一次操作。
void redo()

09 附录:完整源码

​​​​​​​关注公众号下载本示例完整源码(20_QTextEdit_example.zip)。

-【End】-

#想了解更多精彩内容,关注下方公众号,还有示例源码、开发工具免费下载。

喜欢本文章,记得点赞、分享、关注哦~

  • 32
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

20YC编程

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值