qt基础知识之类库概述
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基础知识之类库概述的更多相关文章
- C++ Qt基础知识
时间如流水,只能流去不流回. 学历代表你的过去,能力代表你的现在,学习能力代表你的将来. 学无止境,精益求精. 记录C++ Qt的基础知识学习记录 <C++ Qt设计模式(第二版)>
- 基础知识(09) -- Spring 概述
Spring概述-------------------------------------------------------------------------主要内容: 1.Spring是什么 2 ...
- ASP.NET Core 2.2 基础知识(十三) WebAPI 概述
我们先创建一个 WebAPI 项目,看看官方给的模板到底有哪些东西 官方给出的模板: [Route("api/[controller]")] [ApiController] pub ...
- CSS样式基础知识
CSS样式基础知识 CSS样式概述 CSS是Cascading Style Sheet 的缩写.译作“层叠样式表单”.是用于(增强)控制网页样式并允许将样式信息与网页内容分离的一种标记性语言. 引用位 ...
- Magento 架构基础知识概述
Megento 架构基础知识概述 Magento整合了面向对象的基于PHP的应用程序的核心架构原则.这些一般原则的综合讨论既有在线的,也有印刷形式.以下讨论主要关注这些主题如何直接应用于Magento ...
- Java复习(一)——Java语言概述、开发环境、基础知识
设计模式:在各种应用系统中被大量应用,是设计的“常用套路” 作为Java WEB开发人员,需要掌握HTML/CSS/JS和数据库相关知识 常用的应用程序框架:Spring MVC,Spring Boo ...
- C# 基础知识系列-13 常见类库(三)
0. 前言 在<C# 基础知识系列- 13 常见类库(二)>中,我们介绍了一下DateTime和TimeSpan这两个结构体的内容,也就是C#中日期时间的简单操作.本篇将介绍Guid和Nu ...
- Quartz.NET基础知识概述
Quartz.NET是什么 由于我现在使用的Quartz.NET2.2版本,相对2.x变化不大,主要是相对于1.x更新了很多东西,如下基础知识摘录网络. Quartz.NET是一个开源的作业调度框架, ...
- Struts2入门1 Struts2基础知识
Struts2入门1 Struts2基础知识 20131130 代码下载: 链接: http://pan.baidu.com/s/11mYG1 密码: aua5 前言: 之前学习了Spring和Hib ...
随机推荐
- 8种常见的SQL错误用法
常见SQL错误用法 1. LIMIT 语句 分页查询是最常用的场景之一,但也通常也是最容易出问题的地方.比如对于下面简单的语句,一般DBA想到的办法是在type, name, create_time字 ...
- 为什么阿里巴巴Java开发手册中强制要求整型包装类对象值用 equals 方法比较?
在阅读<阿里巴巴Java开发手册>时,发现有一条关于整型包装类对象之间值比较的规约,具体内容如下: 这条建议非常值得大家关注, 而且该问题在 Java 面试中十分常见. 还需要思考以下几个 ...
- Webpack打包css后z-index被重新计算的解决方法
发现问题 最近在使用 Webpack 打包 css 文件时,发现了一个问题,发现打包后的 z-index 值跟源文件 z-index 不一致. 如下图,左侧是源文件,右侧是打包后的文件: 即使加上 ! ...
- 用Python将处理数据得到的csv文件分类(按顺序)保存
用Python中的os和numpy库对文件夹及处理数据后得到的文件进行分类保存: import numpy as np import os for m in range(699,0,-35): cur ...
- ofd电子文档内容分析工具(分析文档、签章和证书)
前言 ofd是国家文档标准,其对标的文档格式是pdf.ofd文档是容器格式文件,ofd其实就是压缩包.将ofd文件后缀改为.zip,解压后可看到文件包含的内容. ofd文件分析工具下载:点我下载.获取 ...
- 设计模式C++描述----08.原型(Prototype)模式
一. 概述 定义:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 换句话说,就是不用重新初始化对象,而是动态地获得对象运行时的状态. 再说明白点,就是要一个拷贝过构造函数类似功能的接 ...
- WebSocket原理及技术简介
摘要: WebSocket用于在Web浏览器和服务器之间进行任意的双向数据传输的一种技术.WebSocket协议基于TCP协议实现,包含初始的握手过程,以及后续的多次数据帧双向传输过程.其目的是在We ...
- [2018-01-12] laravel中的MVC
路由里面可以做所有事情,但是真正的项目当中,路由只用来接收请求,并转发给控制器的方法进行处理 首先我们先了解一下 一.app/Http/routes路由的用法: 方法一. 这种方法写完后在控制器创建方 ...
- mysql约束条件
约束条件 (测试markdown 编辑器专用) null 允许为空 not null 不允许为空 key 键值类型 default 设置默认类型,缺省值为NULL extra 额外设置 CREATE ...
- Centos7下安装nexus3.x 安装
1.官网下载unix版本 2.上传到linux系统的/usr/目录下 [root@lmll70op-ne ~]# cd /usr/ [root@lmll70op-ne usr]# ll 3.解压,并重 ...