QT:第一章:概述及项目文件详解

目录

一、概述

1、Qt是什么?

2、Qt的特点

3、Qt版本选择

4、Qt开发工具集

5、Qt Creator集成开发工具

6、项目文件组成

二、项目文件详解

1、项目文件

2、Qt设计师界面

3、Qt属性窗口

三、信号槽

1、信号槽机制概述

2、信号槽自动关联

3、信号槽手动关联

 3.1、手动关联的步骤:

3.2、connect的两种写法:

3.3、自定义信号

3.4、信号槽的关系

4 、信号槽注意事项

5、信号槽优缺点

优点:

缺点:


一、概述

1、Qt是什么?

        Qt是用C++开发的跨平台应用程序和UI(User Interface)开发框架。使用Qt只需一次开发应用程序,无需重新编写源码,便可跨不同操作系统(windows、linux、mac)部署这些应用程序。此外,Qt还支持不同嵌入式和移动系统,例如:IOS、Android、WinRT等。

        Qt前身是创始于1994的Trolltech(奇趣科技),奇趣科技在2008年6被诺基亚收购,2011年3月Qt被芬兰的Digia公司收购,现在最新的版本是6.x

2、Qt的特点

  1. 纯C++扩展:用C++语言开发

  2. 功能强大:拥有完成的C++图形界面库,集成了OpenGL、多媒体、WebEngine,内置了解析XML和Json的解析器、连接数据库、访问网络、进程间通信、多线程等技术。Qt是应用程序开发的一站式解决方案。

  3. 跨平台、几乎支持所有平台

  4. 资料丰富、文档齐全

3、Qt版本选择

Qt经历了4.x、5.x和6.x,而且还在不断的更新中。Qt用的最多的是Qt5系列,Qt6系列增加了很多新功能,要求操作系统在Win10及以上版本。

  • Qt4.8.7是Qt4系列的终结版本,也是Qt4中最经典最稳定的版本(很多嵌入式开发还使用此版本)

  • Qt5.6.3是最后支持xp系统的长期支持版本;

  • Qt5.12.3是最后提供mysql数据库插件的版本,以后的版本需要自行编译mysql数据库插件;

  • Qt5.12.5是最后样式表性能最高的版本;

  • Qt5.14.2是最后提供离线安装包的版本,后面的全部是在线安装;

  • Qt5.15系列是最后支持win7系统的版本;

  • Qt6.x与Qt5高度兼容,使用Qt5开发的应用程序可以无缝迁移到Qt6;

https://download.qt.io/archive/qt/

4、Qt开发工具集

Qt Assistant (Qt助手):帮助文档

Qt Designer(Qt设计师):能够进行UI界面的设计

Qt Linguist(Qt语言家):实现多语言界面,国际化工具

Qt Demos(Qt示例):帮助学习使用

Qt Creator(IDE集成开发工具):Qt 集成开发工具

5、Qt Creator集成开发工具

  1. Qt Widgets Application 桌面界面应用程序,默认提供一个XXX.ui文件;

  2. Qt Console Application 控制台应用程序,无ui文件,一般用于学习Qt/C++基本语法;

  3. Qt for Python Empty/Window 创建一个用python的Qt应用程序;

  4. Qt Quick Application 创建一个Qt Quick应用程序,其界面采用qml语言进行设计,一般用于移动设备或嵌入式设备上进行炫酷界面设计;

6、项目文件组成

  1. firstApp.pro 项目管理文件,使用Qt Creator打开项目时,需要打开此文件

  2. mainwindow.h 是窗体类对应的头文件

  3. mainwindow.cpp是窗体类对应的源文件

  4. mainwindow.ui 窗体类对应的界面文件

  5. main.cpp 主程序文件,里面必须含有一个main()函数,是程序执行的入口

QT:第一章:概述及项目文件详解_第1张图片

二、项目文件详解

1、项目文件

  • .pro 项目文件

QT:第一章:概述及项目文件详解_第2张图片

  • .pro.user 用户配置描述文件,包含Qt相关的本地配置信息,当需要在不同计算机间移动项目源码时,需要将此文件删除

  • .ui界面文件:本质一个文件文件,可以直接使用notepad++打开

  • .ui 编译后会生成一个C++类文件,文件名ui_mainwindow.h ,在BuildXXX文件夹中,自动包含源文件中

    注意:ui_mainwindow.h文件每次构建项目时都会重新生成该文件,对此文件的修改没有任何意义,所有涉及界面的修改都要在ui设计界面进行。

2、Qt设计师界面

QT:第一章:概述及项目文件详解_第3张图片

3、Qt属性窗口

QT:第一章:概述及项目文件详解_第4张图片

QT:第一章:概述及项目文件详解_第5张图片

三、信号槽

1、信号槽机制概述

        信号槽用于两个对象之间的通信,是Qt特有的消息传输机制,也是Qt不同于其他开发框架最突出的特征。

        信号槽底层是通过函数间的相互调用实现的。每个信号可以用函数表示,称为信号函数;每个槽也可以用函数表示,称为槽函数。

        Qt中所有控件都有接收信号的能力,一个控件可以接收多个不同的信号,对接收到的每个信号,控件都可以做出相应的响应动作。控件也有发射信号的能力,例如:按钮QPushButton可以发出clicked信号、pressed信号、releaseed信号

2、信号槽自动关联

        自动关联是将关联关系整合到槽函数的命名中。

        例如:on_firstButton_clicked(),on是固定写法,firstButton指的是发出信号的对象(和ui文件中按钮的objectName保持一致),clicked是firstButton发出的信号名称。

        接收信号的对象是当前窗体(主题窗体,this),接收信号的对象做的响应动作就在on_firstButton_clicked槽函数中。

        

3、信号槽手动关联

        使用connect方式进行手动关联

 3.1、手动关联的步骤:

  1. 使用private slots、public slots、protected slots修饰符在类头文件中进行声明
  2. 在cpp文件中进行方法实现
  3. 用connect方法在构造中建立关联

3.2、connect的两种写法:

//clicked:信号
//myCloseWindowSlot:定义的方法
//SIGNAL、SLOT是Qt自定义的宏

//Qt4写法
connect(ui->handleButton,SIGNAL(clicked()),this,SLOT(myCloseWindowSlot()));
//Qt5写法
connect(ui->handleButton,&QPushButton::clicked,this,&MainWindow::myCloseWindowSlot);
/*
参数1:发出信号的对象
参数2:发出的信号
参数3:接收信号的对象
参数4:槽函数(接收信号对象的响应动作)
参数5:关联方式,Qt::ConnectionType的取值
*/

Qt::ConnectionType的取值有以下5种:

  • 自动关联:Qt::AutoConnection ,默认值。如果接收者对象和发送者对象处于同一个线程中,则使用Qt::DirectConnection(直接关联),否则使用Qt::QueuedConnection(队列关联);

  • 直接关联:Qt::DirectConnection,发完信号后立即调用槽函数,只有槽函数执行返回后,发送信号后面的代码才会执行;

  • 队列关联:Qt::QueuedConnection,发送信号的对象和接收信号的对象处于不同的线程,当程序执行到接收者所在的线程时再执行槽函数,无论槽函数是否执行完毕,发送信号后面的代码都会立即执行。

  • 阻塞队列关联:Qt::BlockingQueuedConnection,它和队列关联的区别是发送信号的线程会一直阻塞,直到槽函数返回。当发送者对象和接收者对象处于同一线程,使用该关联类型会造成程序死锁。

  • 唯一关联:Qt::UniqueConnection,它可以和上面的关联方式进行按位或操作,使用这个关联类型主要防止信号和槽重复关联。

3.3、自定义信号

        信号可以使用Qt内置的信号,也可以使用signals关键字自定义信号,自定义信号只需写信号的声明,不能写信号的定义

        使用emit 关键字发射信号,emit关键字可以发射自定义信号,也可以发射Qt内置信号。

3.4、信号槽的关系

  • 一个信号关联多个槽函数
  • 多个信号关联同一个槽函数
  • 一个信号关联另一个信号
//一个信号关联多个槽函数
connect(ui.threeButton, &QPushButton::clicked, this, &dataType01::modifyWindowTitle);
connect(ui.threeButton, &QPushButton::clicked, this, &dataType01::showTipInfo);

//多个信号关联同一个槽函数
connect(ui.fourButton, &QPushButton::pressed, this, &dataType01::showTipInfo);
connect(ui.fourButton, &QPushButton::released, this, &dataType01::showTipInfo);

//信号关联信号:信号发生者是当前窗口对象,信号接收者也是当前窗体对象
connect(this, SIGNAL(myModifySignal(int, QString)), this, SLOT(modifyWindowTitle(int)));

注意:若存在多个槽函数与同一个信号关联,那么当该信号发出时,槽函数会一个接一个执行,执行顺序与关联顺序相同。

详细讲解链接:QT学习日记5——信号连接信号_qt信号连接另一个信号_herb.dr的博客-CSDN博客

4 、信号槽注意事项

  1. 发送信号的对象和接收信号的对象所属的类型,都需要继承自QObject或其子类;

  2. 在类的声明最开始处必须有Q_OBJECT宏;

  3. 槽函数可以是类的成员函数、static函数、全局函数和匿名函数,此时必须采用connect在Qt5中的写法。

  4. 当connect使用在Qt4中的写法时,槽函数必须在private/public/protected slots修饰符下面,否槽函数不会执行。

  5. 信号只需要声明,不需要定义且返回值必须为void类型

  6. 使用emit关键字在合适的位置发送信号;

  7. 使用connect方法实现信号和槽的手动关联;

  8. 可以使用disconnect方法取消信号和槽的关联;

5、信号槽优缺点

优点:
  • 信号和槽机制是类型安全,相关联的信号和槽的参数类型必须匹配;

  • 信号和槽是松耦合的,信号发送者对象不需要关心接收者对象,接收者对象也不需要关心信号谁发出的;

  • 信号和槽可以使用任意类型任意数量的参数;

缺点:
  • 信号和槽机制在性能上略低于回调机制,但是由于其高度灵活,性能的损耗在应用程序开发时可以忽略。

你可能感兴趣的:(qt,开发语言)