1. QT发展历史,简述
QT是一个跨平台的C++图形界面应用程序框架
- QT在1991年由奇趣科技开发
- 2008年被诺基亚收购
- 2012年QT被Digia公司收购
- 2014 QT Creator 5.3正式版发布,至此QT对IOS,安卓,等各平台的支持
QT支持的平台:
Windows,Linux(KDE),Unix,Android,Mac,Embedded(嵌入式系统)
QT版本
QT6和QT5之间的核心功能差不多,这里使用QT5
QT在发布时有两种许可证:
- 开源许可:使用QT开发时不需要支付费用
- 商业许可:使用QT开发时需要支付费用
开源许可与商业许可区别在技术支持上,商业许可会额外提供技术支持和其他功能
QT优点:
- 跨平台
- 接口简单
- 简化内存回收机制(半自动垃圾回收机制)
- 开发效率高
QT应用场景:
- 桌面应用程序(文件管理程序,媒体播放程序,绘图程序等)
- 移动应用程序
- 嵌入式应用程序(车载程序,工业桌面程序等)
2. 环境搭建
QT开发环境需要安装:
-
C++编译器
-
QT SDK(软件开发工具包,Windows环境下SDK内置C++编译器,在具体安装时需要勾选)
-
集成开发环境IDE(Qt Creator(官方),Visual Studio,Eclipse)
Qt Creator在安装QT SDK时勾选即可
QT SDK5.14下载
QT SDK下载官网
下载比较慢的话可以使用镜像源,我这里使用官方源下载
下载过程
注册QT账号,如果不需要则断开网络安装
MinGW 7.2 64bit选择,其他按照需要选择,我这里多选了Android
之后配置环境变量(非必须)
配置完毕环境变量后
- QTCreator可以找到QT SDK中提供的exe.
- 运行QT程序后,可以找到对应的动态库
Linguist:允许单独创建一个语言配置文件,把界面上需要的文字保存到配置文件上,并且在文字使用前提前把各种语言的翻译都配置进去,可以起到一键切换语言的功能。
使用案例验证是否安装成功
元编译技术:QT框架会在编译的时候自动调用一系列的生成工具,基于你自己写的代码来生成一系列其他代码,最后编译的代码是最后生成的那些代码。
使用QTCreator会自动生成代码,生成的代码包含父类,可以自己设置名称
- QMainWindow:完整的应用程序窗口
- QWidget:表示一个控件(窗口,按钮等等)
- QDialog:对话框
测试时选择QWidget
from file作用:
QT中创建图形化界面程序有两种方式
- 使用C++代码创建
- 通过from file,以图形化的方式来生成界面
选择那个编译器的QT SDK来构建后续代码
构建项目代码解释
#include "widget.h"
#include <QApplication>
int main(int argc, char *argv[])
{
QApplication a(argc, argv);
Widget w;
w.show();
return a.exec();
}
-
QApplication:编写QT程序需要这个对象
-
Widget:创建项目的类目,自动创建这个类。创建一个控件对象,使用show方法显示。这个方法是由Widget父类QWidge实现的
-
a.exec():exec表示让程序运行起来
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h" //from file 被qmake生成的文件
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);//将from file生成的文件和当前widget关联起来
}
Widget::~Widget()
{
delete ui;
}
-
Q_OBJECT:QT内置宏,宏展开是一堆代码,当使用QT信号,槽机制时就需要引入Q_OBJECT宏。
-
Widget(QWidget *parent = nullptr):在QT中引入了对象树机制,创建QT对象后,就可以向对象树(n叉树)上挂,在向对象树上挂时需要指定父对象
-
Ui::Widget *ui:与from file密切相关。
-
#include “ui_widget.h” :from file 被qmake生成的文件
widget.ui:
TestQT.pro: QT项目的工程文件,qmake构建时的依据,类似makefile
- QT+=:要引入的QT模块
- CONFIG:编译c++选项
- SOURCES,HEADERS,FORMS:项目参与构建的文件,QTCreator自动生成
qmake+.pro的作用和makefile是一致的
当项目编译后会生成下面的文件:
- ui_widget.h:widget.ui资源文件,QT自动生成的文件,这个代码在setupUI这个方法生成具体的界面细节