目录
一. 创建新项目
二. 认识Qt Creator界面
2.1 main.cpp 代码解释
2.2 mywidget.h 代码解释
2.3 mywidget.cpp 代码解释
2.4 form file —— Forms里的mywidget.ui
2.5 .pro文件
2.6 编译生成的中间文件
Qt Creator是一个跨平台集成开发环境(IDE),专门用于Qt应用程序开发。它提供了设计、编码、测试和部署基于Qt的软件项目所需的工具和功能
Qt的安装可以参看 Qt开发环境配置
一. 创建新项目
1.1 首先,先点击文件,点击新建项目
1.2 选择创建什么项目;此处选择Qt Widgets Application
1.3 选择项目路径,注意不能带中文!!!
1.4 选择构建工具:通常选择qmake
Qt的构建工具有三种可供选择。
构建系统,通过Qt写的程序,涉及到一系列的“元编程”技术,通过代码生成代码。Qt框架在编译时,会自动先调用一系列生成工具,基于我们自己写的代码,生成一系列的其他的C++代码,最终编译的代码,也是最后生成的这些代码
qmake | 用于自动生成makefile文件,支持跨平台构建,文件后缀为.pro |
CMake | 跨平台构建工具,其本身不是编译器,而是生成一个让编译器能读懂编译流程的文件工具。让CMake自动生成构建系统,例如Makefile和Visual Studio项目文件 |
Qbs | 号称新一代的构建工具,从项目文件的高级项目描述中生成一个正确的依赖表 |
因为Qbs使用的人少,Qt官方弃用了Qbs;对于Qt用户来说,qmake使用最广泛,CMake次之
1.5 填写类信息设置界面:选择基类和勾选ui界面文件(form file,该文件很关键,后续会着重讲解)
类名和Header file,Source file尽量保持一直,可读性好
对于基类,目前有三种基类
QMainWindow | 主窗口类,一般用于较为复杂的应用程序,除了中英客户区界面,还包括菜单栏、工具栏、状态栏以及多个可停靠的工具对话框等 |
QWidget | 最简单、最基本的窗体程序,里面可以放置多个控件实现程序功能 |
QDialog | 基于对话框的程序,对话框一般用于弹窗,也可以用于主界面显示。对话框是从QWidget继续继承而来的,并丰富了一些功能,如模态显示和返回值等 |
上述三个类之间的关系如下图:
1.6 选择语言和翻译文件:支持国际化问题,暂时不考虑,直接下一步
1.7 选择Qt套件
默认只有一个"Desktop Qt 5.14.2 MinGW 64-bit",如果安装配置了多个Qt套件,可以勾选"Select all kits"
Qt套件是Qt从编译链接到运行环境的全部工具和Qt类库的结合,对于MinGW版本,Qt程序生成和调试,至少需要MinGW中的编译器g++(自动调用链接器)、g++配套的基础库,调试器还有使用MinGW环境编译而成的Qt类库自身。默认情况下,在上面Kit Selection里选中全部套件
1.8 选择版本控制系统:如git(后续可把代码提交到码云或github)
到此,点击完成,一个Qt项目就创建成功了
二. 认识Qt Creator界面
2.1 main.cpp 代码解释
#include "mywidget.h"
#include <QApplication>
int main(int argc, char *argv[])//main的形参就是命令行参数
{
//编写一个Qt的图形化界面程序,一定需要有QApplication对象
QApplication a(argc, argv);
//在创建项目时选择生成的类
MyWidget w;
w.show();//创建一个控件对象并显示;hide方法即为隐藏;都是父类QWidget提供的方法
return a.exec();//让程序执行起来
}
- argc是命令行参数的个数,argv保存命令行参数,如./text 777。有两个参数,第一个是./text,第二个是777。所以argc为2,argv分别保存"./text" 和 "777"
- 在创建项目时,我们选择生成MyWidget类,继承自QWidget,可以使用其包含的属性和提供的方法。show()方法会显示控件,hide()方法会隐藏控件
2.2 mywidget.h 代码解释
//防止头文件重复包含
#ifndef MYWIDGET_H
#define MYWIDGET_H
#include <QWidget>//QWidget所需的头文件
QT_BEGIN_NAMESPACE
namespace Ui { class MyWidget; }//在Ui命名空间声明我们选择的类
QT_END_NAMESPACE
class MyWidget : public QWidget//继承自QWidget
{
Q_OBJECT//Qt定义的宏,与"信号"和"槽"机制相关
public:
MyWidget(QWidget *parent = nullptr);//将MyWidget挂到"对象树(N叉树)"
~MyWidget();
private:
Ui::MyWidget *ui;//和form file密切相关
};
#endif // MYWIDGET_H
- Q_OBJECT 是 Qt自定义的宏,其本质是进行文本替换,与Qt核心机制 "信号" 和 "槽" 相关
- MyWidget继承自QWidget,在其构造函数中,有父类指针,创建的该对象,就可以把该对象挂到 "对象树" 。对象树是一个N叉树
- Ui::MyWidget *ui 与 form file密切相关
2.3 mywidget.cpp 代码解释
#include "mywidget.h"
#include "ui_mywidget.h"//form file 被 qmake生成的文件
MyWidget::MyWidget(QWidget *parent)
: QWidget(parent)//挂接对象树
, ui(new Ui::MyWidget)
{
ui->setupUi(this);//把form file生成的界面和当前widget关联起来
}
MyWidget::~MyWidget()
{
delete ui;
}
mywidget.cpp没啥内容,关键是要弄懂form file是什么
2.4 form file —— Forms里的mywidget.ui
当双击"mywidget.ui"后,会调用Qt Designer打开ui文件,展示一个图形化的界面编辑器
点击左侧的"编辑"按钮,返回ui文件的内容
ui文件的本质是xml格式的文件
xml和html非常类似,都是使用成对的标签来表示数据
不同点是xml的标签具体含义可以由程序员自定义,html的标签含义则是固定的,由标准委员会统一约定,所有浏览器都要按照同一套标签解释html文件
Qt使用xml文件描述程序的界面,进一步的qmake会调用相关的工具,依据这个xml文件生成一些C++代码,从而把完整的界面构造出来
2.5 .pro文件
Qt通过 .pro文件 + qmake 的方式编译项目,其功能类似于编写Linux程序的Makefile
Qt Creator把编译的细节都封装好了,我们不需要过多关注,只需要点击运行按钮即可
2.6 编译生成的中间文件
右键 .pro文件,选择"在Explorer中显示"。注意:Explorer是文件资源管理器,如果Qt项目在C盘中,可直接使用,否则会找不到"Explorer.exe"。
也可以直接打开项目所在目录。在项目的上级目录会发现有一个"build-xxxxxx"的目录,其中存放着编译生成的临时文件
Makefile由qmake生成。
debug文件夹中有着我们编译生成的程序
点击lesson1.exe,就会运行程序,其效果和我们在Qt Creator中点击运行按钮相同
在build-xxxxx中有一个ui_mywidget.h,由widget.ui xml 生成 的.h文件
将其拖拽到Qt Creator中
可以看到Ui_MyWidget类的实现。
在mywidget.cpp中有使用(在cpp文件中叫Ui::MyWidget,二者相同),Ui_MyWidget的实现根据xml文件,也就是.pro文件