qt是用标准c++编写的跨平台开发类库,它对标准c++进行拓展,引入元对象系统、信号&槽、属性等特征

全局定义

容器类及对应迭代器

qt的模块化体系,分为 基本模块和拓展模块,一个模块通常就是一个编程主题,如数据库、图表、网络等。

一、核心特点

1. 概述

作为用标准C++编写的开发类库,它为GUI程序和非GUI程序提供各种类

Meta-Object Compiler,  简称MOC元对象编辑器(预处理器):将带有qt特性的源文件转换为标准C++兼容的形式,再由标准C++编译器进行统一编译。

使用到信号&槽机制的类,private部分必须声明Q_OBJECT宏(有这个宏,MOC才能识别并进行预处理)

Qt Core模块包含qt在标准c++基础之上增加的特性:元对象系统(包含信号&槽、属性系统、动态类型转换等)

2. 元对象系统

元对象系统的三个基本组成部分:

  • QObject类是所有元对象系统的类的基类
  • 在一个自定义类的private部分声明 Q_OBJECT宏,使得该类可以使用元对象的特性
  • MOC为每个QObject类的子类进行预处理

3. 属性系统

qt提供一个Q_PROPERTY()宏可以定义宏属性,它也是基于元对象系统实现的。

QObject::setProperty()函数,可以在运行时为类的特定实例定义一个新的属性,称作动态属性。

Q_CLASSINFO()宏,可以为类的元对象定义”名称-值“信息, 再通过QMetaObject::classInfo()获取信息。

4. 信号与槽

GUI应用的主要设计,就是对界面上各组件的信号的响应,你需要知道什么情况下发射哪些信号,再合理的处理这些信号就行了。

信号与槽的关联函数,原型是:

  QObject::connect(sender, SIGNAL(signal()), receiver, SLOT(slot());

  其中:

    sender是 QObject指针类型

    signal是信号名

    receiver是QObject指针类型,如果是this可省略

    slot是槽函数

    

因为QObject是所有Qt类的基类,而connect是一个静态函数,所以实际使用时可省略限定符。

SIGNAL()和SLOT() 是两个宏函数,作用是将信号和槽函数转化成字符串。

一个信号关联多个槽函数时,当信号发生后,槽函数按连接顺序依次执行

严格情况下,信号与槽函数的参数列表要一致。只需写参数类型。

关于信号&槽关联函数的两个重载函数:

  重载一:connect(sender, SIGNAL(signal(), receiver, SLOT(slot());

  举例:    connect(spinNum, SIGNAL(valueChanged(int)), this, SLOT(updateState(int));

  说明:1.需要注明参数类型  2.使用SIGNAL()和SLOT()

  重载二:QMetaObject::Connection QObject::connect(const QObject *sender, const QMetaMethod &signal,

                                    const QObject *receiver, const QMetaMethod &method, Qt::ConnectionType type = Qt::AutoConnection)

  举例:connect(lineEdit, &QLineEdit::textChanged, this, &Widget::on_textChanged);

  说明:1.要求信号与槽函数没有重载版本 2.适合于参数列表较长时使用

关于关联类型:

  Qt::ConnectionType type, 缺省值为Qt::AutoConnection

    缺省时,关联方式将在信号发射时确定,如果信号的发射者与接收者在同一线程则使用Qt::DirectConnection ,不同线程使用Qt::QueuedConnection

    Qt::DirectConnection  ---信号发生时,槽函数立即执行

    Qt::QueuedConnection  ---信号发生后,只有等到事件循环回到接收者线程中才执行槽函数

    Qt::BlockingQueuedConnection  ---信号发生后立即阻塞,槽函数执行完成后再继续执行,只能用于发送者与接收者在不同线程的情况下。

获取信号发射者:

  在槽函数里使用QObject::sender(),可以获得信号发射者的指针(QObject *),再通过类型转换获取:

  如:  QSpinBox *spinBox = qobject_cast<QSpinBox *>(sender());

自定义信号的定义与使用要求:

  1. 在类的signals区域声明(不属于private, public等)

  2.无返回类型

  3.不需要实现,在需要在特定条件下emit即可

二、全局定义

<QtGlobal>头文件,定义了Qt类库的全局定义:基本数据类型、函数、宏

一般的Qt类的头文件都包含了它,所以不需要显式包含它。

1. 数据类型

  为了跨平台数据类型的统一,qt为常见数据类型定义了类型符号:

2.全局函数

  

3. 宏定义

  

三、容器类

  qt容器类分为顺序容器和关联容器,比STL容器类更轻巧、安全和易用(做了速度、存储方面的优化,是线程安全的)

1.顺序容器

  QList   QLinkedList  QVector  QStack  QQueue

2.关联容器

  QMap  QMultiMap  QHash  QMultiMap  QSet

3.容器类的迭代(STL)

  qt容器的STL迭代器,与Qt和STL原生算法兼容,且进行了速度优化

  四种类型 iterator   const_iterator    reverse_iterator    const_reverse_iterator

4. foreach()

  本质是一个宏函数,但使用时与for循环类似(支持循环内定义迭代变量,支持break语句)

四、qt类库的模块化

qmake工具详解:https://blog.csdn.net/lvdepeng123/article/details/79007988

1.基本模块

2.附加模块

用于某些特殊场景

    

qt基础知识之类库概述的更多相关文章

  1. C++ Qt基础知识

    时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 记录C++ Qt的基础知识学习记录 <C++ Qt设计模式(第二版)>

  2. 基础知识(09) -- Spring 概述

    Spring概述-------------------------------------------------------------------------主要内容: 1.Spring是什么 2 ...

  3. ASP.NET Core 2.2 基础知识(十三) WebAPI 概述

    我们先创建一个 WebAPI 项目,看看官方给的模板到底有哪些东西 官方给出的模板: [Route("api/[controller]")] [ApiController] pub ...

  4. CSS样式基础知识

    CSS样式基础知识 CSS样式概述 CSS是Cascading Style Sheet 的缩写.译作“层叠样式表单”.是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 引用位 ...

  5. Magento 架构基础知识概述

    Megento 架构基础知识概述 Magento整合了面向对象的基于PHP的应用程序的核心架构原则.这些一般原则的综合讨论既有在线的,也有印刷形式.以下讨论主要关注这些主题如何直接应用于Magento ...

  6. Java复习(一)——Java语言概述、开发环境、基础知识

    设计模式:在各种应用系统中被大量应用,是设计的“常用套路” 作为Java WEB开发人员,需要掌握HTML/CSS/JS和数据库相关知识 常用的应用程序框架:Spring MVC,Spring Boo ...

  7. C# 基础知识系列-13 常见类库(三)

    0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...

  8. Quartz.NET基础知识概述

    Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...

  9. Struts2入门1 Struts2基础知识

    Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...

随机推荐

  1. Vue学习系列(三)——基本指令

    前言 在上一篇中,我们已经对组件有了更加进一步的认识,从组件的创建构造器到组件的组成,进而到组件的使用,.从组件的基本使用.组件属性,以及自定义事件实现父子通讯和巧妙运用插槽slot分发内容,进一步的 ...

  2. 自己动手破解Z.EntityFramework.Extensions 4.0.11.0的方法

    因为项目中使用到Z.EntityFramework.Extensions 和 Z.EntityFramework.Plus(免费开源)两个类库,但是Z.EntityFramework.Extensio ...

  3. R的安装

    更新时间:2019.09.23 1. 序言 之前曾经用过一段时间的R(一直忍受着原生R那个超级"简洁"的界面),但是后来重装了系统并且学习了Python,就没有再怎么碰过R了.然而 ...

  4. Java线程切换(一)

    (本文由言念小文原创,转载请注明出处) 一  前言有Android开发经验的同学都清楚,UI的更新必须在主线程中进行,且主线程不能被阻塞,否则系统ANR异常.我们往往做一些数据处理是耗时操作,必须要在 ...

  5. SpringData-Redis发布订阅自动重连分析

    SpringData-Redis发布订阅自动重连分析 RedisMessageListenerContainer 配置 @Bean @Autowired RedisMessageListenerCon ...

  6. 基于appium实现的线性代码引用unittest单元测试框架

    在前段时间,分享了几篇关于appium基础的博文,再加上期间也有讲到unittest测试框架,所以今天就来一个专题,在appium+python实现的线性代码基础上,引入unittest框架,使代码更 ...

  7. DirectX9:第一章 初始化Direct3D

    一.Direct3D概述 Direct3D是一套底层图形API,可以被视为应用程序与图形设备交互的中介. 应用程序.Direct3D以及硬件之间的交互关系: 在Direct3D和图形设备之间有一个环节 ...

  8. Python能做什么,自学Python效果怎么样?

    短时间掌握一门技能是现代社会的需求.生活节奏越来越快,现在不是大鱼吃小鱼,而是快鱼吃慢鱼的时代,人的时间比机器的时间更值钱.Python作为一种轻量级编程语言,语言简洁开发快,没那么多技巧,受到众多追 ...

  9. Java对象"后事处理"那点事儿——垃圾回收(一)

    1.Dead Or Alive 我们都知道对象死亡的时候需要进行垃圾回收来回收这些对象从而释放空间,那么什么样的对象算是死亡呢,有哪些方法可以找出内存中的死亡对象呢?一般来说,我们可以这样认为:如果内 ...

  10. Spring Boot 2.X(十五):集成 Swagger2 开发 API 文档(在线+离线)

    前言 相信很多后端开发在项目中都会碰到要写 api 文档,不管是给前端.移动端等提供更好的对接,还是以后为了以后交接方便,都会要求写 api 文档. 而手写 api 文档的话有诸多痛点: 文档更新的时 ...