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

news2025/3/13 2:26:49

:因为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文件,构建系统会自动处理其余步骤。

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

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

相关文章

科技引领未来,中建海龙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;从而影响细胞…

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

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…

尚硅谷爬虫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…

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…

【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…

MySQL-事务隔离级别

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

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

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

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

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

智能猫眼实现流程图

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

foobar2000设置DSP使用教程及软件推荐

foobar2000安卓中文版&#xff1a;一款高品质手机音频播放器 foobar2000安卓中文版是一款备受好评的高品质手机音频播放器。 几乎支持所有的音频格式&#xff0c;包括 MP3、MP4、AAC、CD 音频等。不论是经典老歌还是最新的流行音乐&#xff0c;foobar2000都能完美播放。除此之…

【R语言】回归分析与判别分析

一、线性回归分析 1、lm()函数 lm()函数是用于拟合线性模型&#xff08;Linear Models&#xff09;的主要函数。线性模型是一种统计方法&#xff0c;用于描述一个或多个自变量&#xff08;预测变量、解释变量&#xff09;与因变量&#xff08;响应变量&#xff09;之间的关系…

AllData数据中台核心菜单十三:数据湖平台

&#x1f525;&#x1f525; AllData大数据产品是可定义数据中台&#xff0c;以数据平台为底座&#xff0c;以数据中台为桥梁&#xff0c;以机器学习平台为中层框架&#xff0c;以大模型应用为上游产品&#xff0c;提供全链路数字化解决方案。 ✨奥零数据科技官网&#xff1a;…

Spring Cloud Gateway中断言路由和过滤器的使用

一&#xff0c;Gateway概念 Spring Cloud Gateway&#xff08;简称 Gateway&#xff09;是一个基于 Spring WebFlux 的 API 网关解决方案&#xff0c;旨在为微服务架构中的客户端提供路由、负载均衡、认证、限流、监控等功能。它作为微服务架构中的流量入口&#xff0c;通常位…

AcWing 798. 差分矩阵

题目来源&#xff1a; 找不到页面 - AcWing 题目内容&#xff1a; 输入一个 n 行 m 列的整数矩阵&#xff0c;再输入 q 个操作&#xff0c;每个操作包含五个整数 x1,y1,x2,y2,c&#xff0c;其中 (x1,y1) 和 (x2,y2)表示一个子矩阵的左上角坐标和右下角坐标。 每个操作都要将…