注:因为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++代码 :构建系统(如qmake
或CMake
)调用uic
工具,将.ui
文件转换为C++头文件(如ui_mainwindow.h
)
3、绑定界面与逻辑 :生成的头文件被包含到主程序中,通过setupUi
函数将界面与窗口关联
4、编译与运行 :生成的代码与其他源文件一起编译,最终生成可执行文件
程序员只需修改.ui
文件,构建系统会自动处理其余步骤。