C++QT教程3——手册4.11.1自带教程(笔记)——创建一个基于Qt Widget的应用程序
文章目录
- 创建一个基于Qt Widget的应用程序
- 创建Text Finder项目
- 素材文件
- 填补缺失的部分
- 设计用户界面
- 完成头文件
- 完成源文件
- 创建资源文件
- 编译和运行程序
- 参考文章
创建一个基于Qt Widget的应用程序
本教程介绍如何使用Qt Creator创建一个小型Qt应用程序,名为Text Finder。它是Qt UI工具中Text Finder示例的简化版本。应用程序的用户界面是使用Qt Designer通过Qt小部件构建的。应用程序逻辑是通过使用代码编辑器编写的C++代码。
创建Text Finder项目
-
选择文件 > 新建文件或项目 > 应用程序 > Qt Widgets应用程序 > 选择。
打开介绍和项目位置对话框。
-
在名称字段中,输入TextFinder。
-
在创建位置字段中,输入项目文件的路径。例如,
C:\Qt\examples
,然后点击下一步(在Windows和Linux上)或继续(在macOS上)。
打开套件选择对话框。
-
选择您的项目的构建和运行套件,然后点击下一步或继续。
注意:如果在工具 > 选项 > 套件(在Windows和Linux上)或Qt Creator > 首选项 >
套件(在macOS上)中只指定了一个套件,则会跳过此对话框。打开类信息对话框。
-
在类名字段中,输入TextFinder作为类名。
-
在基类列表中,选择QWidget作为基类类型。
注意:头文件、源文件和表单文件字段会自动更新以匹配类的名称。
-
点击下一步或继续。
打开项目管理对话框。
-
查看项目设置,并点击完成(在Windows和Linux上)或完成(在macOS上)创建项目。
注意:项目将以编辑模式打开,并隐藏这些说明。要返回到这些说明,请打开帮助模式。
素材文件
TextFinder项目现在包含以下文件:
- textfinder.h
- textfinder.cpp
- main.cpp
- textfinder.ui
- textfinder.pro
.h
和.cpp
文件包含了必要的样板代码。.pro
文件是完整的。
填补缺失的部分
首先设计用户界面,然后继续填写缺失的代码。最后,添加查找功能。
设计用户界面
- 在“项目”视图中以编辑器模式双击打开textfinder.ui文件,启动集成的Qt Designer。
- 将以下小部件拖放到表单中:
-
标签(QLabel)
-
文本编辑框(QLineEdit)
-
按钮(QPushButton)
请注意:要轻松定位小部件,请使用侧边栏顶部的搜索框。例如,要找到标签小部件,开始键入“label”即可。
-
双击标签小部件,输入关键词文本。
-
双击按钮小部件,输入查找文本。
-
在属性窗格中,将对象名称更改为findButton。
-
按下Ctrl+A(或Cmd+A)选择小部件,点击水平布局(或在Linux或Windows上按Ctrl+H,或在macOS上按Ctrl+Shift+H)应用水平布局(QHBoxLayout)。
-
拖放一个文本编辑框小部件(QTextEdit)到表单中。
-
选择屏幕区域,点击垂直布局(或按Ctrl+L)应用垂直布局(QVBoxLayout)。
应用水平和垂直布局确保应用程序界面适应不同的屏幕尺寸。
-
要在用户按下查找按钮时调用查找函数,可以使用Qt的信号和槽机制。当特定事件发生时,会发出一个信号,而槽是响应特定信号的函数。Qt小部件具有预定义的信号和槽,可以直接在Qt Designer中使用。要为查找函数添加一个槽:
- 右键点击查找按钮以打开上下文菜单。
- 选择“转到槽”> “clicked()”,然后选择“确定”。
会在头文件textfinder.h中添加一个私有槽on_findButton_clicked(),并在源文件textfinder.cpp中添加一个私有函数TextFinder::on_findButton_clicked()。
-
按下Ctrl+S(或Cmd+S)保存更改。
有关使用Qt Designer设计表单的更多信息,请参阅Qt Designer手册。
完成头文件
textfinder.h文件已经有必要的#include,一个构造函数,一个析构函数和Ui对象。你需要添加一个私有函数loadTextFile(),以读取并显示输入文本文件的内容在QTextEdit中。
-
在编辑视图的项目窗格中,双击打开textfinder.h文件进行编辑。
-
在private部分添加一个私有函数,在Ui::TextFinder指针后面,如下代码片段所示:
private slots:void on_findButton_clicked();private:Ui::TextFinder *ui;void loadTextFile();
完成源文件
现在头文件已经完成,转到源文件textfinder.cpp。
-
在编辑视图的项目窗格中,双击打开textfinder.cpp文件进行编辑。
-
添加代码使用QFile加载文本文件,用QTextStream读取,并使用QTextEdit::setPlainText()在textEdit中显示它。如下代码片段所示:
void TextFinder::loadTextFile(){QFile inputFile(":/input.txt");inputFile.open(QIODevice::ReadOnly);QTextStream in(&inputFile);QString line = in.readAll();inputFile.close();ui->textEdit->setPlainText(line);QTextCursor cursor = ui->textEdit->textCursor();cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);}
-
为了使用QFile和QTextStream,在textfinder.cpp中添加以下#include:
#include <QFile>#include <QTextStream>
-
对于on_findButton_clicked()槽函数,添加代码提取搜索字符串,并使用QTextEdit::find()函数在文本文件中查找该字符串。如下代码片段所示:
void TextFinder::on_findButton_clicked()
{
QString searchString = ui->lineEdit->text();
ui->textEdit->find(searchString, QTextDocument::FindWholeWords);
}
-
一旦这两个函数都完成了,在构造函数中添加一行调用loadTextFile()的代码,如下代码片段所示:
TextFinder::TextFinder(QWidget *parent): QWidget(parent), ui(new Ui::TextFinder){ui->setupUi(this);loadTextFile();}
通过这行代码,在uic生成的ui_textfinder.h文件中会自动调用on_findButton_clicked()槽函数:
QMetaObject::connectSlotsByName(TextFinder);
创建资源文件
你需要一个资源文件(.qrc),其中嵌入输入文本文件。输入文件可以是任何带有文本段落的.txt文件。创建一个名为input.txt的文本文件,并将其存储在textfinder文件夹中。
添加资源文件的步骤:
-
选择文件 > 新建文件或项目 > Qt > Qt资源文件 > 选择。
打开"选择位置"对话框。
-
在名称字段中输入textfinder。
-
在路径字段中,输入
C:\Qt\examples\TextFinder
,然后点击下一步或继续。
打开"项目管理"对话框。
-
在"添加到项目"字段中,选择TextFinder.pro,然后点击完成或完成以在代码编辑器中打开该文件。
-
选择添加 > 添加前缀。
-
在前缀字段中,将默认前缀替换为斜杠(
/
)。 -
选择添加 > 添加文件,以定位并添加input.txt。
编译和运行程序
现在你已经拥有了所有必要的文件,点击按钮来编译和运行你的程序。
参考文章
【Qt】Qt创建Qt Qt Widgets项目
用户界面开发框架Qt 6.x入门级教程 - 创建基于Qt Widget的应用(一)
相关文章:

C++QT教程3——手册4.11.1自带教程(笔记)——创建一个基于Qt Widget的应用程序
文章目录 创建一个基于Qt Widget的应用程序创建Text Finder项目素材文件 填补缺失的部分设计用户界面完成头文件完成源文件创建资源文件 编译和运行程序 参考文章 创建一个基于Qt Widget的应用程序 本教程介绍如何使用Qt Creator创建一个小型Qt应用程序,名为Text F…...

手机商城网站的分析与设计(论文+源码)_kaic
目录 摘 要 1 1 绪论 2 1.1选题背景意义 2 1.2国内外研究现状 2 1.2.1国内研究现状 2 1.2.2国外研究现状 3 1.3研究内容 3 2 网上手机商城网站相关技术 4 2.1.NET框架 4 2.2Access数据库 4 2.3 JavaScript技术 4 3网上手机商城网站分析与设…...

vue2 封装 webSocket 开箱即用
第一步: 下载 webSocket npm install vue-native-websocket --save 第二步: 需要在 main.js 中 引入 import websocket from vue-native-websocket; Vue.use(websocket, , {connectManually: true, // 手动连接format: json, // json格式reconnection:…...

使用fopen等标准C库来操作文件
fopen 需要的头文件: #include <stdio.h> 函数原型: FILE *fopen(const char *pathname, const char *mode); 参数: pathname: 文件路径mode: “r” :以只读方式打开文件,该文件必须存在。“w” ÿ…...
Spring-Cloud-Loadblancer详细分析_1
背景 从SpringCloud 2020 版本之后,组件移除了除 Eureka 以外,所有 Netflix 的相关,包括最常用的 Ribbon Hystrix 等,所以 SpringCloud 在 spring-cloud-commons 提供了Loadbalancer 用来替代 Ribbon。本系列就来介绍Loadbalance…...
键盘键码keyCode对照表
字母和数字键的键码值(KeyCode)按键键码按键键码A65J74B66K75C67L76D68M77E69N78F70O79G71P80H72Q81I73R82 字母和数字键的键码值(KeyCode)按键键码按键键码S83149T84250U85351V86452W87553X88654Y89755Z90856048957 数字键盘上的键的键码值(KeyCode)按键键码按键键码0968104…...

jupyter切换conda虚拟环境
环境安装 conda install nb_conda 进入你想使用的虚拟环境: conda activate your_env_name 在你想使用的conda虚拟环境中: conda install -y jupyter 在虚拟环境中安装jupyter: conda install -y jupyter 重启jupyter 此时我们已经把该安装…...
【数据结构•堆】经典问题:k路归并
题目描述 k路归并问题: 把k个有序表合并成一个有序表。( k < 10^4 ) 输入输出格式 输入格式: 输入数据共有 2*k1 行。 第一行,一个整数k( k < 10^4 ),表示有k个有序…...
VUE3 动态路由
带参数的动态路由匹配 很多时候,我们需要将给定匹配模式的路由映射到同一个组件。例如,我们可能有一个 User 组件,它应该对所有用户进行渲染,但用户 ID 不同。在 Vue Router 中,我们可以在路径中使用一个动态字段来实现…...

CentOS软件包管理rpm、yum
一、软件包概述 Linux常见软件包分为两种,分别是源代码包、二进制文件包。源代码包是没有经过编译的包,需要经过GCC、C编译器编译才能运行,文件内容包含源代码文件,通常以.tar.gz、.zip、.rar结尾;二进制包无需编译&am…...

【VSCode】报错:出现段错误解决办法 (Segmentation fault)
VScode报错:Segmentation fault (core dumped)的解决办法 解决Program received signal SIGSEGV, Segmentation fault.的辛酸 Linux环境下段错误的产生原因及调试方法小结 Linux下的段错误Segmentationfault产生的原因及调试方法经典.pdf 在程序中,TF…...
Linux Centos 8 用户管理之重置密码
如果在使用linux系统时遇到系统密码问题无法进入系统或者操作的时候可以按照下面的方法重置用户密码。 一、root用户密码重置: 方式一: 1.重启电脑或虚拟机,在刚进引导界面时候按“e"键,进入编辑模式。 2.在”quiet"…...

C语言快速回顾(三)
前言 在Android音视频开发中,网上知识点过于零碎,自学起来难度非常大,不过音视频大牛Jhuster提出了《Android 音视频从入门到提高 - 任务列表》,结合我自己的工作学习经历,我准备写一个音视频系列blog。C/C是音视频必…...

【Apollo】Apollo-ros版本架构学习与源码分析
😏★,:.☆( ̄▽ ̄)/$:.★ 😏 这篇文章主要介绍Apollo-ros版本架构学习与源码分析。 无专精则不能成,无涉猎则不能通。——梁启超 欢迎来到我的博客,一起学习,共同进步。 喜欢的朋友可以关注一下&a…...
【Express.js】集成RabbitMQ
集成RabbitMQ 本节我们介绍在 express.js 中集成 rabbitmq. RabbitMQ 是一个消息队列中间件,常用于请求削峰,事务的队列处理,事件订阅机制的实现等。 准备工作 创建一个 express.js 项目(本文基于evp-express-cli)…...

UI美工设计岗位的基本职责概述(合集)
UI美工设计岗位的基本职责概述1 1、有良好的美术功底、设计新颖,整体配色及设计创意理念,能够独立完成整个网站页面设计及制作; 2、熟练运用DIV CSS,HTML 设计制作网页 ; 3、熟练运用Photoshop,Dreamweaver,Coreldraw(或Illustrator),Fla…...
最强自动化测试框架Playwright(23)-API测试
playwright支持进行API测试 示例: 如下代码创建API请求上下文,使用post方法请求API,并返回响应结果。 import playwright from playwright.sync_api import sync_playwrightwith sync_playwright() as p:api_request_contextp.request.new…...

k8s 自身原理 4
前面咱们分享了 mater 和 worker 节点里面都有哪些组件,他们又是各自主要负责的工作是什么,现在我们心里应该都有数了吧 master 节点: etcd 存储资源配置,ApiServer 提供 RESTful Api 用于交互,scheduler 用于调度 p…...
ZLMediaKit(webrtc)在linux上(CentOS7)部署与启动
一.ZLMediaKit(webrtc)在CentOS7部署与启动 # 1. 卸载旧版本 yum remove git # 2. 安装 yum 源的 Git 版本 yum install -y git # 3. 查看版本 git version # 输出 git version 1.8.3.1配置全局环境变量 # 1. 编辑配置文件 vim /etc/profile # 2. 在 /etc/profile 文件中末尾…...
汽车基础软件新「战争」:群雄混战,谁在抢跑?
中国车用基础软件迎来了发展的黄金窗口期。 当前,汽车电子电气架构正在加速向“跨域融合”的时代演进,汽车软件架构也在加速向SOA架构升级,软硬件分层解耦成为了实现“软件定义汽车”新开发模式的前提。 过去,汽车的所有功能开发…...

龙虎榜——20250610
上证指数放量收阴线,个股多数下跌,盘中受消息影响大幅波动。 深证指数放量收阴线形成顶分型,指数短线有调整的需求,大概需要一两天。 2025年6月10日龙虎榜行业方向分析 1. 金融科技 代表标的:御银股份、雄帝科技 驱动…...
Oracle查询表空间大小
1 查询数据库中所有的表空间以及表空间所占空间的大小 SELECTtablespace_name,sum( bytes ) / 1024 / 1024 FROMdba_data_files GROUP BYtablespace_name; 2 Oracle查询表空间大小及每个表所占空间的大小 SELECTtablespace_name,file_id,file_name,round( bytes / ( 1024 …...
五年级数学知识边界总结思考-下册
目录 一、背景二、过程1.观察物体小学五年级下册“观察物体”知识点详解:由来、作用与意义**一、知识点核心内容****二、知识点的由来:从生活实践到数学抽象****三、知识的作用:解决实际问题的工具****四、学习的意义:培养核心素养…...

什么是库存周转?如何用进销存系统提高库存周转率?
你可能听说过这样一句话: “利润不是赚出来的,是管出来的。” 尤其是在制造业、批发零售、电商这类“货堆成山”的行业,很多企业看着销售不错,账上却没钱、利润也不见了,一翻库存才发现: 一堆卖不动的旧货…...

【网络安全】开源系统getshell漏洞挖掘
审计过程: 在入口文件admin/index.php中: 用户可以通过m,c,a等参数控制加载的文件和方法,在app/system/entrance.php中存在重点代码: 当M_TYPE system并且M_MODULE include时,会设置常量PATH_OWN_FILE为PATH_APP.M_T…...

在 Visual Studio Code 中使用驭码 CodeRider 提升开发效率:以冒泡排序为例
目录 前言1 插件安装与配置1.1 安装驭码 CodeRider1.2 初始配置建议 2 示例代码:冒泡排序3 驭码 CodeRider 功能详解3.1 功能概览3.2 代码解释功能3.3 自动注释生成3.4 逻辑修改功能3.5 单元测试自动生成3.6 代码优化建议 4 驭码的实际应用建议5 常见问题与解决建议…...

解析“道作为序位生成器”的核心原理
解析“道作为序位生成器”的核心原理 以下完整展开道函数的零点调控机制,重点解析"道作为序位生成器"的核心原理与实现框架: 一、道函数的零点调控机制 1. 道作为序位生成器 道在认知坐标系$(x_{\text{物}}, y_{\text{意}}, z_{\text{文}}…...

门静脉高压——表现
一、门静脉高压表现 00:01 1. 门静脉构成 00:13 组成结构:由肠系膜上静脉和脾静脉汇合构成,是肝脏血液供应的主要来源。淤血后果:门静脉淤血会同时导致脾静脉和肠系膜上静脉淤血,引发后续系列症状。 2. 脾大和脾功能亢进 00:46 …...
React父子组件通信:Props怎么用?如何从父组件向子组件传递数据?
系列回顾: 在上一篇《React核心概念:State是什么?》中,我们学习了如何使用useState让一个组件拥有自己的内部数据(State),并通过一个计数器案例,实现了组件的自我更新。这很棒&#…...

大模型——基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程 下载安装Docker Docker官网:https://www.docker.com/ 自定义Docker安装路径 Docker默认安装在C盘,大小大概2.9G,做这行最忌讳的就是安装软件全装C盘,所以我调整了下安装路径。 新建安装目录:E:\MyS…...