当前位置: 首页 > article >正文

QT基础一、学会建一个项目

:因为CSDN有很多付费才能吃到的史,本人对此深恶痛绝,所以我打算出一期免费的QT基础入门专栏,这是QT基础知识的第一期,学会建一个项目,本专栏是适用于c / c++基础不错的朋友的一个免费专栏,接下来的内容会涉及到许多术语或者说专有名词,对于不懂编译链、编辑器、调试器 (也就是从未自己装过c环境的朋友可以绕道了) ,c++STL不懂的朋友,请去打好基础,再来学习。这一篇文章不涉及QT的安装,如果有需要的,可以在评论区留言,我未来会出一期。


一、新建项目

1、点击文件,再点击新建文件或项目 

2、选择Application ---> QT Widgets Application --->Choose

创建一个图形化的窗口小部件

3、创建项目名字

4、默认 

下面可以自己改类的名字,因为我这个只是一个demo,就全默认了

 

 5、初学者建议选mingw
6、点击完成

7、创建成功的样式 

点击Forms目录下的后缀为ui的文件后,会跳出这样的窗口 

再点击编辑模式(别告诉我你这也不会),会跳出一个xml的界面(这个我未来应该会讲)

到此,你成功的创建一个空项目,为自己喝彩吧,你迈出了第一步 


二、编辑图形窗口

1、打开ui文件

2、在搜索框依次搜索 label(标签)、edit (编辑)、button(按钮)

这些全都是label(拖动到窗口就行)

 新增加的是  line edit

新增加的是push button

3、可以修改这些部件在程序中的name(用过前端的应该懂)

点击姓名,右下角可修改

其它的都是一样的操作,修改完后


 三、运行项目

运行之后,点击注册没有反应,是因为没有建立对应的槽函数(槽函数是什么后面会讲)

1、右键注册,点击转到槽

 2、选择clicked(),表示单击

自动生成了一个函数

3、添加QMessageBox头文件,运行下列代码
void MainWindow::on_submitButton_clicked()
{// 当用户点击提交按钮时,该函数会被自动调用// 从userNameEdit文本框中获取用户输入的用户名,并将其与欢迎信息拼接成一个完整的字符串QString str = "亲爱的" + ui->userNameEdit->text()  // 取出userNameEdit里的内容(即用户输入的用户名)+ ", 欢迎来到召唤师峡谷";  // 拼接欢迎信息// 使用QMessageBox弹出一个信息提示框,显示欢迎信息// 参数说明:// this: 父窗口指针,表示该消息框属于当前窗口// "Welcome": 消息框的标题// str: 显示在消息框中的内容,即上面拼接好的欢迎信息// QMessageBox::Ok: 消息框中的按钮类型,这里只显示一个“确定”按钮QMessageBox::information(this, "Welcome", str, QMessageBox::Ok);
}
 4、运行之后,点击注册


四、理解源码 

1、main.cpp的代码
#include "mainwindow.h"  // 包含主窗口类的头文件,MainWindow类定义在此文件中
#include <QApplication>  // 包含QApplication类的头文件,QApplication用于管理应用程序的控制流和主要设置int main(int argc, char *argv[])
{// 创建一个QApplication对象,用于管理应用程序的资源和事件循环// argc 和 argv 是命令行参数,传递给QApplication以处理可能的命令行选项QApplication a(argc, argv);// 创建MainWindow对象,即应用程序的主窗口MainWindow w;// 显示主窗口,调用show()函数使窗口可见w.show();// 进入应用程序的主事件循环,等待用户交互(如鼠标点击、键盘输入等)// exec()会一直运行,直到应用程序退出(如关闭窗口),并返回退出码return a.exec();
}
2、1-demo.pro 的代码
# 添加Qt的核心模块和图形用户界面模块
QT       += core gui# 如果Qt的主版本号大于4(即使用的是Qt5或更高版本),则添加widgets模块
# widgets模块包含了常用的UI控件,如按钮、文本框等
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets# 启用C++11标准,确保可以使用C++11的新特性
CONFIG += c++11# 定义QT_DEPRECATED_WARNINGS宏,使编译器在使用已被标记为过时的Qt功能时发出警告
# 这有助于开发者识别并逐步淘汰旧的API,改用新的替代方案
DEFINES += QT_DEPRECATED_WARNINGS# 如果希望代码在使用过时的API时直接编译失败,可以取消下面这行的注释
# 这可以帮助强制开发者避免使用已经废弃的功能
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000    # 禁用Qt 6.0.0之前的所有已废弃API# 指定项目的源文件列表
# main.cpp: 应用程序的入口点,包含main()函数
# mainwindow.cpp: 主窗口类的实现文件
SOURCES += \main.cpp \mainwindow.cpp# 指定项目的头文件列表
# mainwindow.h: 主窗口类的声明文件
HEADERS += \mainwindow.h# 指定项目的UI文件列表
# mainwindow.ui: 使用Qt Designer设计的主窗口界面文件,最终会被uic工具转换为C++代码
FORMS += \mainwindow.ui# 默认的部署规则,指定目标文件的安装路径
# 如果目标平台是QNX,则将可执行文件安装到/tmp/$${TARGET}/bin目录下
qnx: target.path = /tmp/$${TARGET}/bin# 如果目标平台是Unix(但不是Android),则将可执行文件安装到/opt/$${TARGET}/bin目录下
else: unix:!android: target.path = /opt/$${TARGET}/bin# 如果target.path不为空,则将目标文件添加到安装列表中
!isEmpty(target.path): INSTALLS += target
3、mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>  // 包含QMainWindow类的头文件,QMainWindow是Qt中用于创建主窗口的基类QT_BEGIN_NAMESPACE  // 进入Qt命名空间,确保与Qt相关的代码在正确的命名空间中
namespace Ui { class MainWindow; }  // 前向声明Ui::MainWindow类,该类是由Qt Designer生成的UI界面类
QT_END_NAMESPACE  // 结束Qt命名空间// 定义MainWindow类,继承自QMainWindow,表示应用程序的主窗口
class MainWindow : public QMainWindow
{Q_OBJECT  // 使用Q_OBJECT宏,启用Qt的信号与槽机制、国际化支持等功能public:// 构造函数,初始化MainWindow对象// parent参数指定父窗口部件,默认为nullptr(即没有父窗口)MainWindow(QWidget *parent = nullptr);// 析构函数,释放MainWindow对象占用的资源~MainWindow();private slots:// 槽函数,当用户点击submitButton按钮时,会自动调用该函数void on_submitButton_clicked();private:// 指向Ui::MainWindow对象的指针,用于访问由Qt Designer设计的UI界面元素Ui::MainWindow *ui;
};#endif // MAINWINDOW_H

4、mainwindow.cpp

#include "mainwindow.h"      // 包含MainWindow类的头文件,定义了主窗口类
#include "ui_mainwindow.h"   // 包含由Qt Designer生成的UI界面类的头文件
#include <QMessageBox>       // 包含QMessageBox类的头文件,用于显示消息框// MainWindow类的构造函数,初始化主窗口对象
// parent参数指定父窗口部件,默认为nullptr(即没有父窗口)
MainWindow::MainWindow(QWidget *parent): QMainWindow(parent)    // 调用QMainWindow的构造函数,设置父窗口, ui(new Ui::MainWindow) // 创建Ui::MainWindow对象,用于管理UI界面元素
{ui->setupUi(this);  // 调用setupUi函数,将UI界面与当前窗口关联
}// MainWindow类的析构函数,释放主窗口对象占用的资源
MainWindow::~MainWindow()
{delete ui;  // 删除Ui::MainWindow对象,释放内存
}// 槽函数:当用户点击submitButton按钮时,会自动调用该函数
void MainWindow::on_submitButton_clicked()
{// 当用户点击提交按钮时,该函数会被自动调用// 从userNameEdit文本框中获取用户输入的用户名,并将其与欢迎信息拼接成一个完整的字符串QString str = "亲爱的" + ui->userNameEdit->text()  // 取出userNameEdit里的内容(即用户输入的用户名)+ ", 欢迎来到召唤师峡谷";  // 拼接欢迎信息// 使用QMessageBox弹出一个信息提示框,显示欢迎信息// 参数说明:// this: 父窗口指针,表示该消息框属于当前窗口// "Welcome": 消息框的标题// str: 显示在消息框中的内容,即上面拼接好的欢迎信息// QMessageBox::Ok: 消息框中的按钮类型,这里只显示一个“确定”按钮QMessageBox::information(this, "Welcome", str, QMessageBox::Ok);
}

五、QT里的ui文件是如何参与编译的?

在Qt中,.ui文件通过以下步骤参与编译:

1、设计界面 :使用Qt Designer创建  .ui文件(XML格式),描述界面布局和控件

2、转换为C++代码 :构建系统(如qmakeCMake)调用uic工具,将.ui文件转换为C++头文件(如ui_mainwindow.h

3、绑定界面与逻辑 :生成的头文件被包含到主程序中,通过setupUi函数将界面与窗口关联

4、编译与运行 :生成的代码与其他源文件一起编译,最终生成可执行文件

程序员只需修改.ui文件,构建系统会自动处理其余步骤。

相关文章:

QT基础一、学会建一个项目

注&#xff1a;因为CSDN有很多付费才能吃到的史&#xff0c;本人对此深恶痛绝&#xff0c;所以我打算出一期免费的QT基础入门专栏&#xff0c;这是QT基础知识的第一期&#xff0c;学会建一个项目&#xff0c;本专栏是适用于c / c基础不错的朋友的一个免费专栏&#xff0c;接下来…...

科技引领未来,中建海龙C-MiC 2.0技术树立模块化建筑新标杆

在建筑行业追求高效与品质的征程中&#xff0c;中建海龙科技有限公司&#xff08;简称“中建海龙”&#xff09;以其卓越的创新能力和强大的技术实力&#xff0c;不断书写着装配式建筑领域的新篇章。1 月 10 日&#xff0c;由深圳安居集团规划&#xff0c;中建海龙与中海建筑共…...

解锁养生秘籍,拥抱健康生活

在这个快节奏的时代&#xff0c;人们行色匆匆&#xff0c;常常在忙碌中忽略了健康。其实&#xff0c;养生并非遥不可及&#xff0c;它就藏在生活的细微之处&#xff0c;等待我们去发现和实践。 规律作息是健康的基础。日出而作&#xff0c;日落而息&#xff0c;顺应自然规律&am…...

STM32 如何使用DMA和获取ADC

目录 背景 ‌摇杆的原理 程序 端口配置 ADC 配置 DMA配置 背景 DMA是一种计算机技术&#xff0c;允许某些硬件子系统直接访问系统内存&#xff0c;而不需要中央处理器&#xff08;CPU&#xff09;的介入&#xff0c;从而减轻CPU的负担。我们可以通过DMA来从外设&#xf…...

细胞计数专题 | LUNA-FX7™新自动对焦算法提高极低细胞浓度下的细胞计数准确性

现代细胞计数仪采用自动化方法&#xff0c;在特定浓度范围内进行细胞计数。其上限受限于在高浓度条件下准确区分细胞边界的能力&#xff0c;而相机视野等因素则决定了下限。在图像中仅包含少量可识别细胞或特征的情况下&#xff0c;自动对焦可能会失效&#xff0c;从而影响细胞…...

DeepSeek教unity------MessagePack-01

中文&#xff1a;GitCode - 全球开发者的开源社区,开源代码托管平台 MessagePack是C# 的极速 MessagePack 序列化器。它比 MsgPack-Cli 快 10 倍&#xff0c;并且性能超过其他 C# 序列化器。MessagePack for C# 还内置支持 LZ4 压缩——一种极其快速的压缩算法。性能在诸如游戏…...

vite+vue3开发uni-app时低版本浏览器不支持es6语法的问题排坑笔记

重要提示&#xff1a;请首先完整阅读完文章内容后再操作&#xff0c;以免不必要的时间浪费&#xff01;切记&#xff01;&#xff01;&#xff01;在使用vitevue3开发uni-app项目时&#xff0c;存在低版本浏览器不兼容es6语法的问题&#xff0c;如“?.” “??” 等。为了方便…...

WPF-数据转换器

一、单值转换器 1.不传参数 转换器 当Value值大于100时返回红色 public class DataConverter : IValueConverter{/// <summary>/// 表示从源到目标数据转换/// </summary>/// <param name"value">数据源的值</param>/// <param name&q…...

蓝桥杯备考:贪心算法之纪念品分组

P1094 [NOIP 2007 普及组] 纪念品分组 - 洛谷 这道题我们的贪心策略就是每次找出最大的和最小的&#xff0c;如果他们加起来不超过我们给的值&#xff0c;就分成一组&#xff0c;如果超过了&#xff0c;就把大的单独成一组&#xff0c;小的待定 #include <iostream> #i…...

Win11配置wsl、ubuntu、docker

系统要求 安装WSL。 开通虚拟化&#xff1a; 准备工作 dism.exe /online /enable-feature /featurename:Microsoft-Windows-Subsystem-Linux /all /norestartdism.exe /online /enable-feature /featurename:VirtualMachinePlatform /all /norestartwsl --set-default-versi…...

以mysql驱动为案例,从源码角度深入分析Java的SPI机制

本文将以mysql驱动为案例&#xff0c;深入跟踪源码分析Java的SPI&#xff08;Service Provider Interface&#xff09;机制。 环境 java 8&#xff0c;mysql8.0&#xff0c;mysql-connector-java 8.0.20 代码 public class MysqlConnectorTest {public static void main(St…...

市盈率(P/E Ratio):理解股票价格与盈利的关系(中英双语)

市盈率&#xff08;P/E Ratio&#xff09;&#xff1a;理解股票价格与盈利的关系 今天在阅读《漫步华尔街》&#xff08;原书第13版&#xff09;的过程中&#xff0c;看到了“股票价格是每股盈利的 6 倍”的类似表述&#xff0c;于是产生了本文。 在投资股票时&#xff0c;投资…...

尚硅谷爬虫note008

一、handler处理器 定制更高级的请求头 # _*_ coding : utf-8 _*_ # Time : 2025/2/17 08:55 # Author : 20250206-里奥 # File : demo01_urllib_handler处理器的基本使用 # Project : PythonPro17-21# 导入 import urllib.request from cgitb import handler# 需求&#xff…...

AWS上基于高德地图API验证Amazon Redshift里国内地址数据正确性的设计方案

该方案通过无服务架构实现高可扩展性&#xff0c;结合分页查询和批量更新确保高效处理海量数据&#xff0c;同时通过密钥托管和错误重试机制保障安全性及可靠性。 一、技术栈 组件技术选型说明计算层AWS Lambda无服务器执行&#xff0c;适合事件驱动、按需处理&#xff0c;成…...

matlab汽车动力学半车垂向振动模型

1、内容简介 matlab141-半车垂向振动模型 可以交流、咨询、答疑 2、内容说明 略 3、仿真分析 略 4、参考论文 略...

【新品解读】AI 应用场景全覆盖!解码超高端 VU+ FPGA 开发平台 AXVU13F

「AXVU13F」Virtex UltraScale XCVU13P Jetson Orin NX 继发布 AMD Virtex UltraScale FPGA PCIE3.0 开发平台 AXVU13P 后&#xff0c;ALINX 进一步研究尖端应用市场&#xff0c;面向 AI 场景进行优化设计&#xff0c;推出 AXVU13F。 AXVU13F 和 AXVU13P 采用相同的 AMD Vir…...

智能硬件定位技术发展趋势

在科技飞速进步的当下&#xff0c;智能硬件定位技术作为众多领域的关键支撑&#xff0c;正沿着多元且极具创新性的路径蓬勃发展&#xff0c;持续重塑我们的生活与工作方式。 一、精度提升的极致追求 当前&#xff0c;智能硬件定位精度虽已满足诸多日常应用&#xff0c;但未来…...

【Elasticsearch】`nested`和`flattened`字段在索引时有显著的区别

有同学问&#xff0c;nested查询效率不高为啥不直接扁平化查询呢&#xff1f;就跟之前的普通结构查询一样&#xff0c;这就有些想当然了&#xff0c;因为扁平化的结构在存储时&#xff0c;其实跟我们想的不一样&#xff0c;接下来给出扁平化在索引时的存储结构(尤其是当嵌套对象…...

【Linux探索学习】第二十七弹——信号(上):Linux 信号基础详解

Linux学习笔记&#xff1a; https://blog.csdn.net/2301_80220607/category_12805278.html?spm1001.2014.3001.5482 前言&#xff1a; 前面我们已经将进程通信部分讲完了&#xff0c;现在我们来讲一个进程部分也非常重要的知识点——信号&#xff0c;信号也是进程间通信的一…...

redis解决高并发看门狗策略

当一个业务执行时间超过自己设定的锁释放时间&#xff0c;那么会导致有其他线程进入&#xff0c;从而抢到同一个票,所有需要使用看门狗策略&#xff0c;其实就是开一个守护线程&#xff0c;让守护线程去监控key&#xff0c;如果到时间了还未结束&#xff0c;就会将这个key重新s…...

Ollama+DeepSeek+Open-WebUi

环境准备 Docker Ollama Open-WebUi Ollama 下载地址&#xff1a;Ollama docker安装ollama docker run -d \ -v /data/ollama/data:/root/.ollama \ -p 11434:11434 \ --name ollama ollama/ollama 下载模型 Ollama模型仓库 # 示例&#xff1a;安装deepseek-r1:7b doc…...

MySQL-事务隔离级别

事务有四大特性&#xff08;ACID&#xff09;&#xff1a;原子性&#xff0c;一致性&#xff0c;隔离性和持久性。隔离性一般在事务并发的时候需要保证事务的隔离性&#xff0c;事务并发会出现很多问题&#xff0c;包括脏写&#xff0c;脏读&#xff0c;不可重复读&#xff0c;…...

对于简单的HTML、CSS、JavaScript前端,我们可以通过几种方式连接后端

1. 使用Fetch API发送HTTP请求&#xff08;最简单的方式&#xff09;&#xff1a; //home.html // 示例&#xff1a;提交表单数据到后端 const submitForm async (formData) > {try {const response await fetch(http://your-backend-url/api/submit, {method: POST,head…...

从入门到精通:Postman 实用指南

Postman 是一款超棒的 API 开发工具&#xff0c;能用来测试、调试和管理 API&#xff0c;大大提升开发效率。下面就给大家详细讲讲它的安装、使用方法&#xff0c;再分享些实用技巧。 一、安装 Postman 你能在 Postman 官网&#xff08;https://www.postman.com &#xff09;下…...

error: conflicting types for ‘SSL_SESSION_get_master_key’

$ make make all-am make[1]: Entering directory ‘/home/linuxuser/tor’ CC src/lib/tls/libtor_tls_a-tortls_openssl.o In file included from src/lib/tls/tortls_openssl.c:61: ./src/lib/tls/tortls_internal.h:55:8: error: conflicting types for ‘SSL_SESSION_get_…...

sql sqlserver的特殊函数COALESCE和PIVOT的用法分析

一、COALESCE是一个返回参数中第一个非NULL值的函数&#xff0c; 列如&#xff1a;COALESCE&#xff08;a,b,c,d,e&#xff09;;可以按照顺序取abcde&#xff0c;中的第一个非空数据&#xff0c;abcde可以是表达式 用case when 加ISNULL也可以实现&#xff0c;但是写法复杂了…...

智能猫眼实现流程图

物理端开发流程图 客户端端开发流程图 用户功能开发流程图 管理员开发流程图...

c/c++蓝桥杯经典编程题100道(19)汉诺塔问题

汉诺塔问题 ->返回c/c蓝桥杯经典编程题100道-目录 目录 汉诺塔问题 一、题型解释 二、例题问题描述 三、C语言实现 解法1&#xff1a;递归法&#xff08;难度★&#xff09; 解法2&#xff1a;迭代法&#xff08;难度★★★&#xff09; 四、C实现 解法1&#xff1…...

蓝桥杯单片机大模板(西风)

#include <REGX52.H> #include "Key.h" #include "Seg.h" //变量声明区 unsigned char Key_Val,Key_Down,Key_Old;//按键扫描专用变量 unsigned char Key_Slow_Down;//按键减速专用变量 10ms unsigned int Seg_Slow_Down;//按键扫描专用变量 500ms …...

【Java基础】静态多态和动态多态

多态&#xff08;Polymorphism&#xff09; 多态是面向对象编程&#xff08;OOP&#xff09;中的核心概念之一&#xff0c;它指的是 同一接口&#xff0c;多个实现方式。在 Java 中&#xff0c;多态主要有 两种形式&#xff1a; 静态多态&#xff08;Static Polymorphism&…...