目录
1、下载安装
以下载window平台下的Qt5.12.9版本举例(注意!!这里下载记得要下载5版本以上的,因为5版本以上的自带打包工具:windeployqt)
这里跳过即可,Qt 在安装过程中会提示用户进行注册和登录,不用理会,实际开发时不需要登录
Qt 安装过程中最关键的一步是组件的选择
(其他步骤按照默认进行即可,这里不再截图展示)
二、创建项目
左上角文件,点击新建,然后会弹出来这个界面
这个界面,左侧是选择新建的是工程还是单个文件,单个文件一般都是新建一个类或者新建一个ui界面等等用到, 我们新建一个工程,选择Application,然后中间的是选择样式,第一个是窗口程序,第二个是控制台程序,我们新建一个窗口程序。
选择完毕之后,输入项目名称,注意名称不能有中文,不能有空格,然后确定路径,注意路径不能有中文路径。
然后一直下一步,到这个界面
默认创建的窗口类是QMainWindow,可以选择的基类有: QWidget(单一的窗口,常用) 、QMainWindow(主界面)、QDialog(对话框),其中MainWindow比Widget多了一些常用的控件,例如菜单栏之类。
三、UI操作界面介绍
四、程序文件介绍
pro文件相当于一个配置清单
QT += core gui Qt包含的模块
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets //大于4版本以上 包含 widget模块
TARGET = MyTest //目标 生成的.exe程序的名称
TEMPLATE = app //模板 应用程序模板 Application
SOURCES += \ //源文件
main.cpp \
mainwindow.cpp
HEADERS += \ //头文件
mainwindow.h
FORMS += \ //ui文件界面
mainwindow.ui
.h自定义代码块
#ifndef MAINWINDOW_H // 防止重复包含
#define MAINWINDOW_H
#include <QMainWindow>
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; } //定义命名空间Ui
QT_END_NAMESPACE
class MainWindow : public QMainWindow
{
Q_OBJECT // 所有用到信号的类都要加这个宏
public:
// 公开成员部分
MainWindow(QWidget *parent = nullptr);
~MainWindow();
private slots:
// 私有槽函数的声明区
void set(); // 举个例子,函数名自定义
private:
// 私有成员部分
Ui::MainWindow *ui;
};
#endif // MAINWINDOW
.cpp 定义文件
main.cpp主文件
#include "mainwindow.h"
#include <QApplication>
//包含QApplication类的定义。每个应用程序中都必须使用QApplication对象
//QApplication管理了各种各样的应用程序的广泛资源,比如默认的字体和光标,以及软件的生命周期
int main(int argc, char *argv[]) // argc 命令行变量的数量 argv 命令行变量的数组
{
// 创建 QApplication 对象开始软件运行
// 它在这里被处理这些命令行变量。所有被Qt识别的命令行参数都将从agrv中被移去
// 并且argc也因此而减少
QApplication a(argc, argv);
// 创建 主窗口对象 w
MainWindow w;
// show() 使图形对象显示在屏幕
w.show();
return a.exec();
// 阻塞 程序进入消息循环,等待可能的输入进行响应
// main() 函数将控制权转交给Qt
// 应用程序退出的时候,exec() 函数的值就会返回,然后结束 main函数
// 在exec() 函数中,Qt监听用户和系统的事件并且将信号传递给适当的窗口部件
}
.cpp定义文件
#include "mainwindow.h"
// ui_mainwindow.h 文件是Qt根据.ui文件自动生成的,即要点击构建后才生成
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent) ,
ui(new Ui::MainWindow)
{
ui->setupUi(this); // 进行界面初始化
}
MainWindow::~MainWindow()
{
delete ui; // 删除ui
}
void set() //槽函数实现
{
// 函数体自定义
// 表示接收到信号时,某部件需要执行的操作
}
// connect() 将信号与槽关联
// 语法:connect( 发出信号的对象, SIGNAL(信号), 接收信号的对象, SLOT(槽函数) );
// connent() 不需要在 .h 文件声明
connect(Obj, SIGNAL(clicked()), this, SLOT(set()));
// 这个connent函数将 Obj对象与set()槽函数关联,当你按下Obj,则set()会执行一些操作
.ui 图形样式文件
ui 文件由 XML 语言描述组成,编译时会生成相应的 cpp 文件,这样交叉编译器就可以编译它了。mainwindow.ui 是一个 xml 类型的文件。
ui 文件是生成的不能手动编辑,只能够通过图形界面修改其属性,双击 mainwindow.ui 后可以跳转到设计界面
五、信号与槽
信号和槽是Qt的一个特色,当一个类运行的时候,调用信号,就会触发相应的槽函数,同时信号函数还可以传递参数给槽函数。某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号(signal)。这种发出是没有目的的,类似广播。如果有对象对这个信号感兴趣,它就会使用连接(connect)函数,意思是,将想要处理的信号和自己的一个函数(称为槽(slot))绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自动被回调。
我们打开Qt ui设计师,在里面放一个组件,右键点击它就可以转到槽了
转到槽qt会提供很多信号函数给你用,一个信号函数代表了一个事件,当事件发生的时候就会调用相应的信号函数;
例如clicked():当这个按钮被点击的时候触发的信号函数
选好信号函数之后,Qt会很贴心的帮你命好槽函数的名字,并帮你绑定对应的信号函数,我们只需要在函数里添加需要执行的操作就好了。
也可以显示的把信号函数和槽函数的绑定写出来,或者你想自己绑定其他的信号或者槽函数:
通过连接函数实现
连接函数 :connect(参数1,参数2,参数3,参数4)
信号与槽的关联是用QObject::connect()函数实现的。connect()是QObject类的一个静态函数,而QObject是所有Qt类的基类。在实际调用时也可以忽略前面的限定符,直接调用connect
连接函数 :connect(参数1,参数2,参数3,参数4)
参数1 信号的发送者
参数2 发送的信号(函数地址)
参数3 信号的接受者
参数4 处理的槽函数 (函数的地址)
三种书写方式:
//连接信号与槽,谁发出信号,发出什么信号,谁处理信号,怎么处理
//方式一
connect(ui->lineEdit,SIGNAL(returnPressed()),this,SLOT(on_commit_clicked()));
//方式二
connect(ui->cancel,&QPushButton::clicked,this,&MainWidget::on_cancel_clicked);
//方式三
connect(ui->browse,&QPushButton::clicked,[this]()
{
QMessageBox::information(this,"信息","点击浏览");
});