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. Cocos2d-x 学习笔记(10) ActionInstant

    1.概述 ActionInstant的子类都是立即完成的动作,即一帧就完成了,不像ActionInterval的子类动作需要定义动作总时间. Action类的继承关系图: 2.具体 ActionIns ...

  2. Java项目部署与远程调试两三事

    [开启和进行远程调试]参考https://blog.csdn.net/WSYW126/article/details/748536801.tomcat:配置catalina.sh jpda参数,主要是 ...

  3. Python编程系列---获取请求报文行中的URL的几种方法总结

    在浏览器访问web服务器的时候,服务器收到的是一个请求报文,大概GET请求的格式大概如下: 先随便拿到一个请求报文,蓝色即为我们要获取的 GET  /index.html  HTTP/1.1  Hos ...

  4. config.xml

    ASP.NET应用程序的配置信息都存放于Web.config配置文件中,Web.config配置文件是基于XML格式的文件类型,由于XML文件的可伸缩性,使得ASP.NET应用配置变得灵活.高效.容易 ...

  5. C#扩展一般用于linq

    下面是dictionary的扩展 using System.Collections.Generic; namespace NetAnalysis.Common { public static clas ...

  6. 函数进阶(三) day14

    目录 昨日内容 迭代器 可迭代对象 迭代器对象 for循环原理 三元表达式 列表推导式 字典生成式 zip 生成器表达式 生成器 yield 递归 今日内容 匿名函数 内置方法 掌握 了解 异常处理 ...

  7. 腾讯云上面部署PHP运行环境

    现在云服务器已经很普及了,其价格.安全优势等成为不少开发者的首选.本人由于兴趣爱好,从朋友那边借了一个过来玩了两天,下面就分享整个部署流程吧. 1. 先到腾讯云官网购买服务器,这边就不演示.很简单,跟 ...

  8. Cookie 、session、token都是什么?

    1.Cookie 起源:1993年,网景浏览器的员工为了让用户访问某网站时,进一步提高访问速度,实现个人化网络发明了cookie.(看来有时候的偷懒会促进社会的进步啊~,就像人们不想做饭就诞生了外卖) ...

  9. abp中将SqlServer切换为MySQL

    一.移除默认SQL Server相关包 在EntityFrameworkCore项目下移除包Microsoft.EntityFrameworkCore.SqlServer.Microsoft.Enti ...

  10. 在虚拟机上的关于Apache(阿帕奇)(3)基于IP访问网站

    这篇随笔是基于IP访问网站,和后面两篇文章基于域名和基于端口一起练习效果更好 基于IP(记得下载httpd服务) 首先使用nmtui命令为网卡添加多个ip地址  输入命令:nmtui  进入下面这个界 ...