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. [JZOJ5178]【NOIP2017提高组模拟6.28】So many prefix?

    Description

  2. springboot使用idea打jar包

    1.如果有本地jar包依赖,放到/WEB-INF/lib下,用system类型配到pom中 <dependency> <groupId>org.wechat</group ...

  3. 2、Struts2开始深入

    一.Struts2的配置文件加载顺序 1 .进入过滤器[StrutsPrepareAndExecuteFilter]跟代码,可以看到对应的文件加载顺序 进入StrtsPrepareAndExecute ...

  4. Fiddler抓包和工作原理

    一.概述 Fiddler是一款免费且功能强大的数据包抓取软件.它通过代理的方式获取程序http通讯的数据, 可以用其检测网页和服务器的交互情况,能够记录所有客户端和服务器间的http请求, 支持监视. ...

  5. C# 闭包对像

    主要内容: 1.描述出现的现像 2.分析其出现的原因 3.提示 一.看如下一段代码及结果 class Program { static void Main(string[] args) { List& ...

  6. 包管理工具-yum

    yum介绍 yum(全称为 Yellow dog Updater, Modified)是一个在 Fedora和 RedHat 以及 CentOS 中的 Shell 前端软件包管理器.基于 RPM 包管 ...

  7. ZTUnity Profiler概述及Profiler window 说明

    转贴链接:https://www.jianshu.com/p/ca2ee8a51754

  8. jdk基础配置

    今遇到一事,tomcat启动是报错,将jdk位数错误,有问题,32位和64位的问题 cmd java -verison 显示的确实是jdk 64位,又跑到 环境变量看了下java_home的配置 这里 ...

  9. USACO 07DEC 道路建设(Building Roads)

    Farmer John had just acquired several new farms! He wants to connect the farms with roads so that he ...

  10. CSPS模拟 86

    看见异或两个字就孩怕 T1 按位? T2 这道异或稍水啊233 貌似可以打表找找规律 emm七种转移,有重复刷表 优化一下? T3 skyh已经接了2杯水了(实际情况他已经ak了) cbx开始抬头傻笑 ...