一、QT的基本概念
QT主要用于图形化界面的开发, QT是基于C++编写的一套界面相关的类库,如进程线程库,网络编程的库,数据库操作的库,文件操作的库等。
如何使用这个类库:类库实例化对象(构造函数) --> 学习类库中方法(函数)的使用 --> 后台逻辑的实现。
QT是一个跨平台的GUI图形化界面开发工具。
QT的使用场合:
汽车仪表盘 打印机 医疗器械 自动化的大型设备。
QT的优点:
1.跨平台,具有软为完备的图形开发库,你所能想到的的图形的实现基本都有,比window的MFC的库更强大。
2.接口的封装性好,易上手,学习QT框架对学习计算机图形框架有很重要的参考意义。
3.QT内部基本上有一套自己的简易好用的内存回收机制,对提高C++水平有帮助。
4.有很好的社区环境,市场份额在缓慢上升。
5.轻量级的开发环境,可以做嵌入式开发。
二、QT工具介绍
Assistant:QT类库的帮助手册的工具。
Designer :用来设计图形化界面 对应的界面文件为***.ui (ui文件中的内容是一种标记性的语言)
uic.exe:将***.ui文件转换为标准的C++的代码 ui_***.h
moc.exe:元对象编辑器工具,将QT中非标准的信号和槽,转换为标准的C++的代码
rcc.exe:资源管理器,将QT资源文件(图片,音频文件,视频文件),转换为标准的C++代码 qmake:工程管理的工具 QT工程文件的后缀为***.pro工程文件, qmake工具可以根据***.pro文件,生成Makefile文件, 通过Makefile文件编译C++的代码。
QTcreater:QT集成开发环境工具(IDE) 将上边的所有的工具都集成到一起了。
三、QT工程介绍
3.1 工程管理文件
#工程引导文件,工程管理文件
QT += core gui
#需要加入的类库 core核心库 gui图形界面类库
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
#超过4版本后要自动加widgets类库,前面的版本中,widgets被合并在core类库中
CONFIG += c++11
#支持C++11以后的版本
# The following define makes your compiler emit warnings if you use
# any Qt feature that has been marked deprecated (the exact warnings
# depend on your compiler). Please consult the documentation of the
# deprecated API in order to know how to port your code away from it.
DEFINES += QT_DEPRECATED_WARNINGS
# You can also make your code fail to compile if it uses deprecated APIs.
# In order to do so, uncomment the following line.
# You can also select to disable deprecated APIs only up to a certain version of Qt.
#DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0
#源文件
SOURCES += \
main.cpp \ #包含主程序
mainwindow.cpp #包含源文件
#头文件
HEADERS += \
mainwindow.h
#图形化界面文件
FORMS += \
mainwindow.ui
# Default rules for deployment.
qnx: target.path = /tmp/$${TARGET}/bin
else: unix:!android: target.path = /opt/$${TARGET}/bin
!isEmpty(target.path): INSTALLS += target
3.2 头文件
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
//防止文件重复包含
#include<QPushButton>
#include <QMainWindow>
//引入头文件QMainWindow
QT_BEGIN_NAMESPACE
namespace Ui { class MainWindow; } //声明命名空间
QT_END_NAMESPACE
//自定义的界面类,公共继承自QMainWindow
class MainWindow : public QMainWindow
{
Q_OBJECT //处理信号与槽的元组件
public:
MainWindow(QWidget *parent = nullptr); //构造函数的声明
~MainWindow(); //析构函数的声明
private:
QPushButton *btn1; //自定义的组件
Ui::MainWindow *ui; //使用ui界面类定义出来的指针,用于找到ui界面中拖拽出来的组件
};
#endif // MAINWINDOW_H
3.3 源文件
#include "mainwindow.h" //包含自定义的头文件
#include "ui_mainwindow.h" //包含ui界面生成的头文件
MainWindow::MainWindow(QWidget *parent) //构造函数的定义
: QMainWindow(parent) //调用父类有参构造
, ui(new Ui::MainWindow) //给ui指针申请空间
{
ui->setupUi(this); //调用ui界面函数,给拖拽的组件申请空间并设置相关数据
}
//析构函数的定义
MainWindow::~MainWindow()
{
delete ui;
}
3.4 主测试文件
#include "mainwindow.h" //包含自定义的头文件
#include <QApplication> //包含应用程序的头文件
#include<iostream>
using namespace std;
//主函数
int main(int argc, char *argv[])
{
QApplication a(argc, argv); //使用应用程序实例化对象,调用有参构造
MainWindow w; //使用自定义类实例化一个对象,调用无参构造
w.show(); //调用show方法
cout<<"hello world"<<endl;
return a.exec(); //轮询等待 等待用户操作、等待事件处理、等待相关信号发射
}