【Qt开发】输入类控件(二)-> QTextEdit - 详解

news/2025/10/11 11:32:57/文章来源:https://www.cnblogs.com/slgkaifa/p/19134639

【Qt开发】输入类控件(二)-> QTextEdit - 详解

目录

1 -> 概述

1.1 -> 核心定位与基础功能​

1.2 -> 富文本处理:超越纯文本的排版能力​

1.3 -> 高级特性与扩展性​

1.4 -> 实际应用场景与价值​

2 -> 核心属性

3 -> 核心信号

4 -> 代码示例

4.1 -> 获取多行输入框的内容

4.2 -> 验证输入框的各种信号

5 -> 总结


1 -> 概述

在 Qt 框架的众多 UI 控件中,QTextEdit 以其丰富的功能和灵活的扩展性,成为处理文本编辑需求的核心组件之一。无论是简单的文本输入,还是复杂的富文本排版,它都能提供稳定且高效的解决方案,广泛应用于记事本、文档编辑器、聊天软件等各类需要文本交互的应用程序中。​

1.1 -> 核心定位与基础功能​

QTextEdit 的核心定位是多功能文本编辑容器,它不仅支持基础的纯文本输入与显示,更具备强大的富文本处理能力,是 Qt 中替代基础 QLineEdit 控件、应对复杂文本场景的关键选择。​

其基础功能覆盖了日常文本编辑的核心需求:支持光标定位、文本的复制、剪切、粘贴等标准编辑操作,且能自动处理换行与滚动 —— 当输入内容超出控件可视区域时,会自动生成垂直或水平滚动条,确保编辑体验的流畅性。同时,它允许设置文本的只读模式,在需要展示不可修改的文本内容(如日志查看、文档预览)时尤为实用,只需通过简单的属性配置即可切换编辑与预览状态。​

1.2 -> 富文本处理:超越纯文本的排版能力​

富文本处理是 QTextEdit 最突出的特性之一,它让文本不再局限于单一的字体与格式,能够实现类似 Word 的基础排版效果,极大提升了文本的表现力。​

在格式控制方面,QTextEdit 支持对文本片段或整体进行精细化设置,包括字体类型、大小、粗细、颜色的调整,以及下划线、删除线、斜体等特殊样式的应用。段落级别的排版功能同样丰富,可设置对齐方式(左对齐、居中、右对齐、两端对齐)、行间距、段落间距,还能添加项目符号或编号列表,满足结构化文本的编辑需求。此外,它还支持插入图片、表格等非文本元素,让文本内容的呈现更加多元 —— 图片可自适应控件大小或保持原始尺寸,表格则能灵活调整行列数与单元格样式,进一步拓展了文本编辑的边界。​

1.3 -> 高级特性与扩展性​

除了基础的编辑与排版功能,QTextEdit 还内置了多项高级特性,并通过 Qt 的信号与槽机制提供了良好的扩展性,方便开发者根据业务需求进行定制。​

在文本处理的深度上,QTextEdit 支持查找与替换功能,开发者可通过 API 实现对特定文本片段的定位、高亮及替换操作,这在文档编辑类应用中不可或缺。其内置的撤销与重做机制,能记录用户的编辑操作历史,提升交互的容错性。对于特殊字符的处理,QTextEdit 也表现出色,支持 Unicode 编码,可兼容多语言文本的输入与显示,满足国际化应用的需求。​

在扩展性方面,QTextEdit 提供了丰富的信号(如文本内容变化、光标位置移动、编辑状态改变等),开发者可通过关联相应的槽函数,实现自定义的业务逻辑,例如实时检测文本长度、自动格式化特定内容等。同时,它支持与 Qt 的其他组件联动,如结合 QPrinter 实现文本的打印功能,或与 QTextDocument 配合进行更复杂的文档结构处理,进一步挖掘控件的使用价值。​

1.4 -> 实际应用场景与价值​

QTextEdit 的功能特性使其在各类 Qt 应用中都能发挥重要作用,成为连接用户与文本内容的关键桥梁。​

在轻量级应用中,如简易记事本、便签工具,它可作为核心编辑区域,提供基础的文本输入与保存功能;在专业的文档处理软件中,借助其富文本排版与高级编辑特性,能实现接近专业办公软件的编辑体验;在即时通讯应用里,它可作为消息输入框,支持文字、表情图片的混合输入,提升聊天交互的丰富性;在日志查看或报表展示类工具中,通过只读模式与文本高亮功能,能让关键信息更直观地呈现给用户。

2 -> 核心属性

属性说明
markdown输入框内持有的内容。支持 markdown 格式。能够自动的对 markdown 文本进行渲染成 html
html输入框内持有的内容。可以支持大部分 html 标签,包括 img 和 table 等
placeHolderText输入框为空时提示的内容
readOnly是否是只读
undoRedoEnable

是否开启 undo / redo 功能

按下 ctrl + z 触发 undo

按下 ctrl + y 触发 redo

autoFormating开启自动格式化
tabstopWidth按下缩进占多少空间
overwriteMode是否开启覆盖写模式
acceptRichText是否接收富文本内容
verticalScrollBarPolicy

垂直方向滚动条的出现策略

  • Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条。此为默认值
  • Qt::ScrollBarAlwaysOff:总是关闭滚动条
  • Qt::ScrollBarAlwaysOn:总是显示滚动条
horizontalScrollBarPolicy

水平方向滚动条的出现策略

  • Qt::ScrollBarAsNeeded:根据内容自动决定是否需要滚动条。此为默认值
  • Qt::ScrollBarAlwaysOff:总是关闭滚动条
  • Qt::ScrollBarAlwaysOn:总是显示滚动条

3 -> 核心信号

信号说明
textChanged()文本内容改变时触发

selectionChanged()

选中范围改变时触发
cursorPositionChanged()光标移动时触发
undoAvailable(bool)可以进行 undo 操作时触发
redoAvailable(bool)可以进行 redo 操作时触发
copyAvailable(bool)文本被选中 / 取消选中时触发

4 -> 代码示例

4.1 -> 获取多行输入框的内容

1. 创建一个多行输入框和一个 label

2. 给多行输入框添加 slot 函数。处理 textChanged 信号

  • 通过 toPlainText 方法获取到内部的文本
  • QTextEdit 还提供了 toMarkdown 和 toHtml。需要根据调整不同的获取方式
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}
Widget::~Widget()
{delete ui;
}
void Widget::on_textEdit_textChanged()
{const QString& text = ui->textEdit->toPlainText();ui->label->setText(text);
}

3. 执行程序,可以看到当输入框中的内容发生变化时,label 中的内容同步发生改变

4.2 -> 验证输入框的各种信号

1. 创建多行输入框

2. 给输入框添加以下几个 slot 函数

  • QTextEdit 中包含了一个 QTextCursor 对象,通过这个对象可以获取到当前光标位置和选中的内容
#include "widget.h"
#include "ui_widget.h"
#include 
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}
Widget::~Widget()
{delete ui;
}
void Widget::on_textEdit_textChanged()
{qDebug() << "textChanged: " << ui->textEdit->toPlainText();
}
void Widget::on_textEdit_selectionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug() << "selectionChanged: " << cursor.selectedText();
}
void Widget::on_textEdit_cursorPositionChanged()
{QTextCursor cursor = ui->textEdit->textCursor();qDebug() << "cursorPositionChanged: " << cursor.position();
}
void Widget::on_textEdit_undoAvailable(bool b)
{qDebug() << "undoAvailable: " << b;
}
void Widget::on_textEdit_redoAvailable(bool b)
{qDebug() << "redoAvailable: " << b;
}
void Widget::on_textEdit_copyAvailable(bool b)
{qDebug() << "copyAvailable: " << b;
}

3. 执行程序,观察结果

可以看到:

1)编写内容时,textChanged 和 cursorPositionChanged 会触发

2)选中一段文本,会触发 cursorPositionChanged,selectionChanged,copyAvailable

3)按下 ctrl + z 时,会触发 textChanged,undoAvailable,redoAvailable,cursorPositionChanged

4)按下 ctrl + y,会触发 textChanged,undoAvailable,redoAvailable,cursorPositionChanged

5 -> 总结

作为 Qt 框架中文本编辑领域的标杆控件,QTextEdit 以层层递进的功能体系构建了强大的实用价值:从满足基础输入需求的 “文本容器”,到支撑多元排版的 “富文本工具”,再到可深度定制的 “扩展平台”,它完美适配了从简单到复杂的各类文本场景。其兼顾易用性与灵活性的设计,既降低了开发者的入门门槛,又为高级功能开发预留了充足空间,使其在记事本、专业编辑器、通讯工具等诸多应用中成为不可或缺的核心组件。可以说,QTextEdit 不仅是 Qt 对文本编辑需求的精准回应,更彰显了框架在 UI 组件设计上 “按需适配、弹性扩展” 的核心理念。


感谢各位大佬支持!!!

互三啦!!!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/934684.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于MATLAB的禁忌搜索算法解决物流网络枢纽选址问题

一、问题建模 1. 数学模型 目标函数:最小化总成本(建设成本+运输成本)\(S\):选中的枢纽集合 \(C_i\):候选点i的建设成本 \(w_{kj}\):需求点k到枢纽j的货物量 \(d_{ik}\):候选点i到需求点k的距离 \(x_{ijk}\):需…

springboot 项目部署是tomcat么

------------------------------------------------------ Spring Boot 项目的部署可以使用 Tomcat,但并非只能用 Tomcat。具体取决于项目的配置和需求,主要分为两种情况:** 内置服务器部署 (默认)和外部服务器部…

2025 年最新推荐恒温恒湿试验箱优质厂家榜单:涵盖立式/可程式/小型等多类型设备的精选企业推荐可程式/小型/防爆高低温试/高温高湿试验箱/低温低湿试验箱厂家推荐

在工业生产与科研检测中,恒温恒湿试验箱是保障产品性能稳定性的关键设备,其质量与性能直接影响检测数据的准确性和生产科研进度。当前市场上该类设备品牌众多,部分小厂商以次充好,采用劣质零部件导致设备运行不稳定…

CSS开发工具推荐与实战经验,让样式开发更高效、更精准

本文介绍 CSS 开发工具,包括 VS Code、WebStorm、Sass、PostCSS、Chrome DevTools、Firefox Tools、WebDebugX、PurgeCSS、Lighthouse 等,结合实际案例总结从样式编写到跨端调试的完整工具链与最佳实践。写 CSS 的人…

详细揭秘:详细揭秘:集合划分容斥的容斥系数

宝宝都会的集合划分容斥,从多项式角度推导容斥系数详细揭秘:详细揭秘:集合划分容斥的容斥系数 宝宝都会的集合划分容斥,从多项式角度推导容斥系数 参考文献: 详细揭秘:集合划分容斥的容斥系数 2024.12.23 闲话 浅…

2025 年冷热冲击试验箱生产厂家最新推荐榜:聚焦三箱 / 两箱 / 吊篮式 / 小型 / 风冷式 / 可程式设备,精选优质企业助力高效选购

在工业制造与科研检测领域快速发展的当下,冷热冲击试验箱作为评估产品耐温变性能的核心设备,市场需求日益增长,但行业内厂家数量繁杂、实力悬殊。部分厂家存在技术储备薄弱、工艺精度不足、售后服务滞后等问题,导致…

学好微积分特别是偏微分方程的数值求解对于学习CFD的好处?

学好微积分特别是偏微分方程的数值求解对于学习CFD的好处?当然!这是一个极其重要的问题。可以说,微积分(尤其是偏微分方程数值求解)是CFD的灵魂和基石。学好它们对于学习CFD的好处是全方位的、根本性的,而不仅仅…

基于Logistic映射与Chen超混沌系统结合DNA分块编解码的图像加密技术

一、核心代码matlab 1. 混沌系统初始化 % Logistic映射参数 r = 3.9999999999; % 密钥敏感参数 x0 = 0.547524589; % 初始值% Chen超混沌系统参数 a = 35; b = 28; c = 2.9; d = 0.1;% 生成混沌序列 def logistic_seq(…

批量文件重命名工具(带撤销功能)

最近公司同事需要批量处理文件名的需求:前缀,后缀,替换,于是就有了下面的代码:import os import glob import tkinter as tk from tkinter import ttk, filedialog, messagebox, scrolledtext from datetime impo…

Trae与Gitee MCP强强联合:AI编程生态迎来重大升级

Trae与Gitee MCP强强联合:AI编程生态迎来重大升级 国内AI编程领域迎来重要里程碑。字节跳动旗下明星产品Trae AI IDE宣布与Gitee MCP实现深度集成,这一战略合作将为开发者带来前所未有的智能编码体验。作为国内首款支…

Web前端入门第 88 问:引入 JavaScript 的 script 标签究竟有多少用法?

HTML 版本不停的更新迭代,也导致浏览器支持的写法眼花缭乱,就拿 script 标签来说,刚刚入行的那会儿就只知道用来写内联的 js 代码,后来又学到了引入 js 文件,ES 模块规范化之后又知道能用来引入模块化的 js 代码,…

我如何控制新增的节点是 leader 还是follower呢?

目录背景和价值一、新增节点时的关键配置二、通过分区重分配让新增节点成为更多 Leader1. 为现有主题新增分区,并优先分配到新增节点2. 重新分配原有分区的副本,让新节点成为 Leader三、确保新节点稳定成为 Leader 的…

Nuxt3项目Warn:Browserslist: browsers data (caniuse-lite) is 6 months old.

Nuxt3+Vue3项目中,执行yarn dev时警告:Browserslist: browsers data (caniuse-lite) is 6 months old. 可以看到,执行是没问题,只是这个Warn太刺眼,需要解决。 看到下方提示:请执行 npx update-browserslist-db@…

2025 年全屋定制 / 高端 / 装修收纳设计 / 不锈钢橱柜 / 别墅 / 大平层装修公司推荐:苏州伍德家居与百能家居的优质定制解决方案解析

当下高端家居定制市场需求持续攀升,别墅、大平层业主对居住空间的环保性、收纳性与美学性提出更高要求。但市场上产品质量参差不齐,部分品牌存在材质环保不达标、收纳设计不合理、售后响应滞后等问题,让消费者陷入选…

1_数组

1、相向双指针 15.三数之和 给你一个整数数组 nums ,判断是否存在三元组 [nums[i], nums[j], nums[k]] 满足 i != j、i != k 且 j != k ,同时还满足 nums[i] + nums[j] + nums[k] == 0 。请你返回所有和为 0 且不重复…

SAS重要证明结论

集合部分: \(if \ A \subseteq B, \ B \subseteq A, \ then \ A = B\) \((\cup_{\alpha \in A} S_{\alpha})^c = \cap_{\alpha \in A} (S_{a})^c\) 有序集部分: \(if \ < is \ an \ order \ on \ S, \ these \ tw…

2025 年蒸汽发生器厂家最新推荐排行榜:含 800KG 燃气 / 超低氮冷凝 / 400KG 燃气等多类型设备企业优选指南

当前蒸汽发生器市场品牌繁杂,产品性能差异显著,从热效率、安全防护到环保合规性等方面,不同品牌表现参差不齐。许多企业在选购时,常因缺乏专业参考,难以精准匹配自身生产需求,不仅可能增加能源消耗与运营成本,还…

基于MATLAB的遗传算法(GA)和CPLEX两种方法解决TSP问题

一、遗传算法实现 1. 核心代码 function tsp_ga()% 参数设置numCities = 20; % 城市数量popSize = 100; % 种群大小maxGen = 500; % 最大迭代次数pc = 0.8; % 交叉概率p…

创建数字遗嘱:为亲人留下数字足迹指南

本文探讨了在数字化时代如何管理个人数字资产,包括电子邮件、社交媒体账号、金融账户等数字足迹,并提出了创建数字遗嘱的重要性,帮助亲人在我们离世后妥善处理这些数字遗产。无论我们喜欢与否,我们的生活都已高度数…

全网首发/Qt结合ffmpeg实现rist推拉流/可信赖的互联网流媒体协议/跨平台支持各个系统

一、前言说明 现在音视频时代发展真快,各种协议层出不穷,一个是满足现在的需求,一个是为了满足新的需求,之前搞过rtmp、rtsp、srt、udp推拉流,现在又新出了个rist,乍一看还以为是rtsp的堂弟,其实不搭边的,RIST…