news 2026/6/23 0:08:02

【Qt 5.14.2 新手实战】QTC++入门筑基——10 分钟做个文本编辑器:QLineEdit + QTextEdit 核心用法

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Qt 5.14.2 新手实战】QTC++入门筑基——10 分钟做个文本编辑器:QLineEdit + QTextEdit 核心用法

写课程报告时,是不是总觉得系统自带的记事本功能不够用?要是能有个更贴心的简易文本工具就好了。今天,咱们就用Qt 5.14.2 打造一个这样的文本编辑器,它不仅能满足基本的文本输入,还多了字体设置、内容清空等实用功能。而且,这个小项目代码量在100行以内,30分钟就能跑通,下次课程设计直接就能用,同时还能帮你吃透Qt 5.14.2 的核心输入控件。

一、环境配置清单

基于第一章搭建好的Qt 5.14.2环境,无需额外工具,咱们就可以开始啦。
【Qt 5.14.2 新手实战】QTC++入门筑基——QTC++新手必看:从安装到第一个窗口

二、核心控件拆解

(一)QLineEdit(单行输入)

  1. placeholderText属性设置

    • placeholderText是QLineEdit的一个很实用的属性,它可以在输入框内显示提示性文字,当用户点击输入框准备输入内容时,提示文字就会消失。比如我们可以设置为“请输入标题”。
    • 在Qt 5.14.2中,找到QLineEdit控件,右键点击选择“Properties Editor”(属性编辑器),在属性面板中找到“placeholderText”,输入提示内容即可,如图1所示。
  2. maxLength属性设置

    • maxLength属性用于限制用户在QLineEdit中输入的最大字符数。比如设置为50,就表示用户最多只能输入50个字符。
    • 同样在“Properties Editor”属性面板中找到“maxLength”,输入你想要限制的字符数,如图2所示。

(二)QTextEdit(多行输入)

  1. readOnly属性设置

    • readOnly属性决定了QTextEdit是否可编辑。如果设置为true,用户就只能查看其中的内容,不能进行修改。在属性面板中找到“readOnly”,勾选它就可以将QTextEdit设置为只读模式,如图3所示。
  2. lineWrapMode属性设置

    • lineWrapMode属性控制文本的换行方式。常见的取值有“WidgetWidth”,表示文本会根据QTextEdit的宽度自动换行。在属性面板的“lineWrapMode”下拉菜单中选择你需要的换行模式,如图4所示。

(三)信号槽连接

我们要实现按钮点击触发“清空内容”和“设置字体”功能,这里介绍两种连接方式:

  1. 可视化连接(设计模式右键)

    • 在设计模式下,右键点击用于“清空内容”的按钮(QPushButton),选择“Go to slot…”(转到槽函数),在弹出的对话框中选择“clicked()”信号,然后点击“OK”。

    • 这时候会自动生成一个槽函数框架,在这个函数里添加清空QTextEdit内容的代码:ui->textEdit->clear();

    • 同样的方法,为用于“设置字体”的按钮连接“clicked()”信号到槽函数,在槽函数里添加字体设置相关代码。

  2. 代码连接(connect()函数)

    • 在源文件中,找到合适的位置,比如构造函数里,使用connect()函数进行连接。
    • 以“清空内容”按钮为例,代码如下:
connect(ui->clearButton,&QPushButton::clicked,[=](){ui->textEdit->clear();});

这里ui->clearButton是指向“清空内容”按钮的指针,&QPushButton::clicked表示按钮的点击信号,[=]()是一个Lambda表达式,用于定义槽函数的行为,即清空QTextEdit的内容。
- 在Qt 5.14.2中,信号槽语法基本保持不变,使用起来和以往版本类似,大家可以放心使用。

三、完整代码

下面是实现这个文本编辑器的完整代码,包含输入、清空、字体选择、保存临时内容功能,并且适配Qt 5.14.2的头文件引用:

#include"mainwindow.h"#include"ui_mainwindow.h"#include<QFontDialog>#include<QFileDialog>#include<QMessageBox>MainWindow::MainWindow(QWidget*parent):QMainWindow(parent),ui(newUi::MainWindow){ui->setupUi(this);// 代码连接“清空内容”按钮connect(ui->clearButton,&QPushButton::clicked,[=](){ui->textEdit->clear();});// 代码连接“设置字体”按钮connect(ui->fontButton,&QPushButton::clicked,[=](){boolok;QFont font=QFontDialog::getFont(&ok,this);if(ok){ui->textEdit->setFont(font);}});// 代码连接“保存内容”按钮connect(ui->saveButton,&QPushButton::clicked,[=](){QString filePath=QFileDialog::getSaveFileName(this,tr("Save File"),"",tr("Text Files (*.txt)"));if(!filePath.isEmpty()){QFilefile(filePath);if(file.open(QIODevice::WriteOnly|QIODevice::Text)){QTextStreamout(&file);out<<ui->textEdit->toPlainText();file.close();}else{QMessageBox::warning(this,tr("Warning"),tr("Could not open file"));}}});}MainWindow::~MainWindow(){deleteui;}

对应的头文件mainwindow.h内容如下:

#ifndefMAINWINDOW_H#defineMAINWINDOW_H#include<QMainWindow>QT_BEGIN_NAMESPACEnamespaceUi{classMainWindow;}QT_END_NAMESPACEclassMainWindow:publicQMainWindow{Q_OBJECTpublic:MainWindow(QWidget*parent=nullptr);~MainWindow();private:Ui::MainWindow*ui;};#endif// MAINWINDOW_H

运行效果:

四、常见报错解决方案

(一)报错1:“QTextEdit内容无法清空”

原因:在Qt 5.14.2信号槽连接时“sender对象”未选中,导致信号无法正确传递到对应的槽函数,从而不能执行清空操作。

解决步骤
- 检查代码连接方式下,connect()函数中的对象指针是否正确指向“清空内容”按钮和包含QTextEdit的窗口对象。

(二)报错2:“字体选择对话框不弹出”

原因:未添加#include <QFontDialog>头文件,导致程序找不到字体选择对话框相关的定义。

解决方法:在源文件顶部添加#include <QFontDialog>头文件。

(三)报错3:UI界面重命名后无法使用

原因:因为QT的UI保存没有生效。

解决步骤
- 需要取消勾选“构建目录”

五、拓展任务

大家可以尝试添加“内容字数统计”功能,利用QTextEdit::toPlainText().length()就可以获取QTextEdit中纯文本的字符数。实现思路是:在界面上添加一个QLabel用于显示字数,然后通过按钮点击或者文本内容变化信号触发一个槽函数,在槽函数中获取QTextEdit的字数并更新QLabel的显示内容。

只需19.9元,就能解锁25个Qt 5.14.2可复现项目,这个文本编辑器可直接作为课程作业素材,为你节省时间和精力。后续还有23个实用项目等你解锁,带你一步步掌握Qt 5.14.2开发技能,是不是很期待呢?赶紧行动起来吧!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 21:04:02

区块链智能合约测试方法论与实践路径

智能合约测试的特殊性与必要性 智能合约作为区块链技术的核心执行单元&#xff0c;具有不可篡改、自动执行和去中心化的特性。一旦部署至主网&#xff0c;代码缺陷将可能导致不可逆的经济损失与系统性风险。根据2024年区块链安全审计报告&#xff0c;超过67%的安全漏洞源于测试…

作者头像 李华
网站建设 2026/6/23 18:26:26

椭圆曲线的群、子群和阶

伽罗瓦域&#xff08;Galois Fields&#xff09;想象一下&#xff0c;数学世界里有一个“有限的数字王国”&#xff0c;不像我们平时用的无限整数&#xff0c;这里的一切数字都有限制&#xff0c;只能有固定数量的元素。这个王国叫伽罗瓦域&#xff0c;通常记作 &#xff0c;其…

作者头像 李华
网站建设 2026/6/23 19:52:45

EmotiVoice如何确保克隆声音不侵犯原声权?

EmotiVoice如何确保克隆声音不侵犯原声权&#xff1f; 在数字语音日益“以假乱真”的今天&#xff0c;一段几秒钟的录音&#xff0c;可能足以让AI复刻出你的声音&#xff0c;并用它说出你从未说过的话。这种技术既令人惊叹&#xff0c;也令人不安——当我们的声音可以被轻易复制…

作者头像 李华
网站建设 2026/6/23 19:17:26

【Java毕设全套源码+文档】基于springboot的人力资源管理系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/22 20:33:29

【Java毕设全套源码+文档】基于Java的贫困地区儿童资助系统的设计与实现(丰富项目+远程调试+讲解+定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…

作者头像 李华
网站建设 2026/6/22 23:48:06

jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用

jQuery EasyUI 应用 - 创建展开行明细编辑表单的 CRUD 应用 在前两个教程中&#xff0c;我们分别实现了使用 dialog 弹窗 和 行内编辑 的 CRUD DataGrid。本教程将展示第三种方式&#xff1a;使用 detailview&#xff08;展开行明细视图&#xff09;&#xff0c;点击行左侧的展…

作者头像 李华