《Qt 5.9 C++开发指南》第3章 Qt类库概述【详细摘要】

2023-05-16

Qt是一个用标准C++编写的跨平台开发类库,它对标准C++进行了扩展,引入了元对象系统、信号与槽、属性等特性,使得应用程序开发变得更高效。本章介绍Qt的这些核心特点,对于理解和编写高效的Qt C++程序是大有帮助的。

本章还介绍<QtGlobal>头文件中Qt的一些全局定义,包括数据类型、函数和宏等,介绍Qt的容器类及其相应迭代器的使用方法。这些全局定义和容器类在程序中经常用到,了解其原理便于理解后面遇到的一些实例程序。

3.1  Qt核心特点

Qt对标准C++进行了扩展,引入了一些新的概念和功能,例如信号与槽、对象属性等。Qt的元对象编译器moc(Meta-Object Compiler)是一个预处理器,在源程序被编译前先将这些Qt特性的程序转换为标准C++兼容的形式,然后再由标准C++编译器进行编译。这就是为什么在使用信号与槽机制的类里,必须添加一个Q_OBJECT宏的原因,只有添加了这个宏,moc才能对类里的信号与槽的代码进行预处理。

Qt的元对象系统(meta-object system)提供了对象之间通讯的信号与槽机制、运行时类型信息和动态属性系统。

本节详细介绍了Qt的元对象系统、属性系统、信号与槽的机制和用法,并用一个实例程序samp3_1演示了元对象系统一些特性的使用方法,如动态获取类型信息、通过属性设置或访问类的数据、自定义信号等。

实例samp3_1运行时界面(书中第56 页)

本节内容对于深入理解Qt的特点,灵活使用Qt的元对象系统大有帮助。内容可能有些难懂,可以在对Qt较熟悉后再回来看这部分内容,可获得更深入的理解。

3.2 Qt全局定义

<QtGlobal>头文件包含了Qt类库的一些全局定义,包括基本数据类型、函数和宏。

为了确保在各个平台上各数据类型都有统一确定的长度,Qt为各种常见数据类型定义了类型符号,例如qint8就是signed char的类型定义,即:

typedef  signed char   qint8;

还有quint8、qint16、qint32、qreal等定义。

<QtGlobal>中定义了一些常用函数,如qMin,qrand等。还有一些基础的数学运算函数在<QtMath>头文件中定义,比如三角运算函数、弧度与角度之间的转换函数等。

<QtGlobal>头文件中定义了很多宏,例如程序中经常用到的一个宏Q_UNUSED(name),用于在函数中定义不在函数体里使用的参数,如:


void MainWindow::on_imageSaved(int id, const QString &fileName)
{
    Q_UNUSED(id);
    LabInfo->setText("图片保存为: "+fileName);
}

在这个函数里,id参数没有使用。如果不用Q_UNUSED(id)定义,编译器会出现参数id未被使用的警告。

3.3 容器类

Qt提供了多个基于模板的容器类,这些容器类可以用于存储指定类型的数据项,例如常用的字符串列表类QStringList就是从容器类 QList<QString>继承的,实现对字符串列表的添加、存储、删除等操作。

Qt的容器类比STL(标准模板库)中的容器类更轻巧、安全和易于使用。这些容器类是隐式共享和可重入的,而且它们进行了速度和存储优化,因而可以减少可执行文件的大小。此外,它们还是线程安全的,也就是它们作为只读容器时可被多个线程访问。

容器类是基于模板的类,例如常用的容器类QList<T>,T是一个具体的类型,可以是int, float等简单类型,也可以是QString, QDate等类,但是不能是QObject或任何其子类。T必须是一个可赋值的类型,即T必须提供一个缺省的构造函数,一个可复制构造函数和一个赋值运算符。

例如用QList<T>定义一个字符串列表的容器,其定义方法是:

QList<QString>  aList;

这样定义了一个QList容器类的变量aList,它的数据项是QString,所以aList可以用于处理字符串列表,例如:

aList.append(“Monday”);
aList.append(“Tuesday”);
aList.append(“Wednesday”);
QString  str=aList[0];

Qt的容器类分为顺序容器(sequential containers)和关联容器(associative containers)。

容器迭代类用于遍历容器里的数据项,有Java类型的迭代类和STL类型的迭代类。Java类型的迭代类易于使用,提供高级功能,而STL类型的迭代类效率更高一些。

Qt还提供了foreach宏用于遍历容器内的所有数据项。

Qt的顺序容器类有QList,QLinkedList,QVector,QStack和QQueue。

Qt的关联容器类有QMap,QMultiMap,QHash,QMultiHash和QSet。

QMultiMap和QMultiHash支持一个键关联多个值,QHash和QMultiHash类使用哈希(Hash)函数进行查找,查找速度更快。

本节介绍了各种容器类的特点和用法。

3.4 容器类的迭代

迭代器(iterator)为访问容器类里的数据项提供了统一的方法,Qt有两种迭代器类:Java类型的迭代器和STL类型的迭代器。

Java类型的迭代器更易于使用,且提供一些高级功能,而STL类型的迭代器效率更高。

Qt还提供一个关键字foreach(实际是< QtGlobal >里定义的一个宏)用于方便地访问容器里所有数据项。

本节介绍了各种迭代器的特点和使用方法。

3.5 Qt类库的模块

Qt类库里大量的类根据功能分为各种模块,这些模块又分为几大类:

●       Qt Essentials(Qt基本模块),提供了Qt在所有平台上的基本功能。

●       Qt Add-Ons(Qt附加模块),实现一些特定功能的提供附加价值的模块。

●       Value-Add Modules(增值模块),单独发布的提供额外价值的模块或工具。

●       Technology Preview Modules(技术预览模块),一些处于开发阶段,但是可以作为技术预览使用的模块。

●       Qt Tools(Qt工具),帮助应用程序开发的一些工具。

Qt官网的“All Modules”页面(https://doc.qt.io/qt-5/qtmodules.html)可以查看所有这些模块的信息。

本节简要介绍了这些大类模块中包含的子模块,学习Qt主要就是学习这些模块的中的类的使用。如同学习英语,掌握了语法的各种类型和大的词汇量,才可以灵活应用英语。学会了Qt中各个模块的类的用法,就能灵活实现各种功能需求。



<总目录>        <上一章>            <下一章>



本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

《Qt 5.9 C++开发指南》第3章 Qt类库概述【详细摘要】 的相关文章

  • Vue实现组件间通信

    1 property 在子组件props中定义定属性 xff0c 使用时传递父组件data对象或常量值实现传值通信 2 事件传递 在子组件中通过 emit发送event第一个参数是事件名 xff0c 第二个是消息内容 xff0c 在父组件中
  • 对信号量sem的一些总结

    1 首先来说说信号量和互斥锁的区别 xff1a 信号量用在多线程多任务同步的 xff0c 一个线程完成了某一个动作就通过信号量告诉别的线程 xff0c 别的线程再进行某些动作 xff08 大家都在semtake的时候 xff0c 就阻塞在哪
  • Vue实现双向绑定原理

    在Vue实例构造时将data对象赋值给vue实例之后 xff0c vue会递归遍历data中所有键值对并作为属性赋值到vue实例中 xff0c 利用Object defineProperty 来重新定义属性的set和get函数 xff0c
  • C++ STL总结

    C 43 43 STL分为5部分 容器 xff0c 迭代器 xff0c 空间适配器 xff0c 函数对象 xff0c 泛型算法 xff0c 适配器 一 容器 理解容器的作用 容器的主要作用是用于存储对象 xff08 这里说的对象时指的是包含
  • 第一次测试题笔记(2020.11.9)

    最近写了一些编程题准备做一些笔记方便以后复习 1 字符串判等 题目描述 给定两个大小写字母 空格组成的字符串S1和S2 xff0c 他们的长度都不超过100个字符 xff0c 长度也可以为零 判断压缩掉空格并且忽略掉大小写后 xff0c 这
  • 人工智能--框架表示法

    文章目录 框架理论框架的基本结构框架的表示实例框架 框架系统框架之间的纵向联系框架之间的横向联系 框架理论 框架理论认为 xff0c 我们对世间事物的认识都是以类似框架的结构存储在记忆中的 当遇到一个新事物就从记忆中找出一个合适的框架 xf
  • 并行编译加快VS C++项目的编译速度

    最近编译的项目都比较大 xff0c 话说自己的电脑配置还行 xff0c 但编译所花的时间还是很长 xff0c 遇到需要重新编译整个项目的时候真的有回宿舍睡一觉的冲动 昨天一不小心被我发现了一款软件Xoreax IncrediBuild 今天
  • 云台 学习笔记

    1 云台控制基本任务 xff1a 控制相机坐标系跟踪惯性坐标系 2 yaw计算 xff1a 与惯性坐标系z轴垂直的电机轴旋转不影响偏航角计算 xff0c 将电机轴投影到惯性坐标系的z轴上 xff0c 在roll和pitch稳定的前提下 xf
  • Java Restful API接口获取请求头、请求体、以及设置响应状态码、应答(响应)体等

    一 获取请求头 接口示例1 xff1a 64 PostMapping value 61 34 wxPayNotify 34 public R lt String gt wxPayNotify HttpServletRequest reque
  • [Holo_wo]-计算机专业(物联网工程)应该如何学习?

    大部分的大学生都是普普通通的平常人 xff0c 当然你心里也可能怀远大理想 xff0c 但是面对现实我们还是需要工作 xff0c 既然大学毕业后 xff0c 注定是要在工作的 xff0c 那么从大学刚刚开始就培养起这种意识是不是算是一个梦幻
  • [Holo_wo]-c++库工程总结

    文章目录 一 什么是库1 1 静态库1 2 动态库 二 如何使用库三 如何编写一个库3 1 接口设计a 接口导出问题b 接口设计问题PIMP方法Object Interface 抽象基类法 3 2 如何编译a Linux静态库动态库 b W
  • [Holo_wo]-网络编程之timerfd使用说明

    Talk is cheap Show me the code xff1a span class token macro property span class token directive hash span span class tok
  • stm32cube学习1-rcc配置选择

    在用cube配置时钟时 xff0c 有下面两个选项 BYPASS Clock Source xff08 旁路时钟源 xff09 Crystal Ceramic Resonator xff08 晶体 陶瓷晶振 xff09 下面来解释一下 xf
  • [Holo_wo]-网络编程之eventfd使用说明

    span class token macro property span class token directive hash span span class token directive keyword include span spa
  • [Holo_wo]-如何阅读递归代码,对递归代码结构分析

    因为做算法题的时候经常碰到递归的方法 xff0c 而每次理解递归代码的层次结构都很费脑筋 xff0c 所以我尝试着总结分析了一下递归代码的结构 xff0c 如果有误还望大家指明 类型 函数名 xff08 参数 xff09 跳出递归的条件 相
  • 松灵机器人 SCOUT的ROS代码架构---CAN通信

    松灵机器人感觉可能还是比较小众吧 明明官方的github xff0c 但是star之类的完全没有关注度 xff0c 也没有issue 这个SCOUT ROS主要是解决SCOUT底盘与上位机的通信方式 xff0c 截止目前 xff0c 已经开
  • VINS-Mono 代码解析四、闭环检测和优化 (偏理论)

    一 理论部分 1 1 怎么知道发生了闭环 上图中 蓝线 为正常的闭环优化流程 即通过后端的非线性优化来更新滑窗内所有相机的位姿 紫线为闭环检测模块 当后端优化完成后 会将滑窗内的次新帧进行闭环检测 即首先提取新角点并进行描述 然后与数据库进
  • 八、IMU器件温度漂移补偿

    感谢大神分享 xff1a 多传感器融合定位理论基础 xff08 九 xff09 xff1a 凸优化基础 知乎 1 概述 温补的本质是系统辨识 之前我们在介绍标定的时候 xff0c 也说过一句类似的话 标定的本质是参数辨识 这两者之间相似又不
  • Kalibr 安装+制作采集的图片和IMU数据生成 .bag 文件 (坑最全,解决方法最简单,最详细哈哈)

    测试的数据集 标定板下载页面 https github com ethz asl kalibr wiki downloads 官方下载和安装教程 https github com ethz asl kalibr wiki installat
  • GPS从入门到放弃(三)、GPS坐标系

    可以参考下面的连接理解 xff1a 常用导航坐标系 及 转换关系 xff08 理论 43 程序 xff09 努力努力努力 CSDN博客 定位就需要坐标 xff0c 坐标当然是相对坐标系而言的 xff0c 我们描述一个物体的位置 xff0c

随机推荐

  • RealSenseD435i (四):运行 VINS-mono代码

    一 必读博客 nbsp https blog csdn net hltt3838 article details 120691764 nbsp nbsp nbsp 一 https blog csdn net hltt3838 article
  • 多种视觉SLAM方案对比

    在SLAM研究中 xff0c 我们通常需要在各数据集上测试各个方案的性能情况 如下主要对表1中6个视觉SLAM方案进行相关测试 xff0c 测试其在不同场景 要求下的精度和鲁棒性 xff0c 并给出最终方案选型 由于时间 场地等原因 xff
  • SDL概念介绍

    下面是我对网上知识的一些总结 xff1a 1 SDL是一套开放源代码的跨平台多媒体开发库 xff0c 使用C语言写成 2 SDL提供了数种控制图像 声音 输入输出的函数 xff0c 可以跨平台进行软件开发 3 目前SDL多用于开发游戏 模拟
  • Python turtle库 写“生日快乐”

    1 首先要CTRL 43 R然后cmd进入命令行 xff0c 输入pip install turtle安装第三方库 2 打开python IDE xff0c 如下图 xff0c 点击 File 34 选择 New File 34 3 复制代
  • 简单回路与初级回路(圈)区别

    1 回路 xff1a 起点终点相同 简单通路 xff1a 起点到终点所经过的边不同 简单回路 xff1a 起点到终点所经过的边不同 43 回路 初级通路 xff1a 起点到终点所经过的顶点各异 43 简单通路 初级回路 圈 xff1a 起点
  • wechaty搭建微信机器人——超详细版

    文章目录 前言一 wechaty是什么 xff1f 二 准备1 安装 Node js xff08 需要10 0版本以上 xff09 2 安装Wechaty 总结 前言 提示 xff1a 这里可以添加本文要记录的大概内容 xff1a 例如 x
  • 离散 排斥或与相容或的区别

    1 相同之处 xff1a 就是 或 2 不同之处 xff1a 一个排斥 xff0c 一个相容 p xff1a 2是偶数 q xff1a 2是奇数 xff0c 这种情况下是排斥或 xff0c 也即一个命题成立 xff0c 则其他命题不成立 p
  • Latex中ACM-Reference-Format顺序与论文引用顺序不一致solution

    在第一次编译的时候 xff0c 先使用 bibliographystyle unsrt 而非模板的 bibliographystyle ACM Reference Format 的进行按顺序的编译 在之后的编译中 xff0c 使用 bibl
  • 正则表达式快速入门

    目录 1 正则表达式是什么 xff0c 有什么作用2 定位符例子2 1想要搜索以 001 开头的文件2 2想要搜索以 ab 结尾的文件2 3搜索单词开头为 zh 34 的文件2 4搜索单词结尾为 zh 34 的文件2 5搜索单词中间为 zh
  • JAVASE基础(一)

    这里写目录标题 一 javaSE基础1 jdk文档2 代码量统计工具3 文档注释4 反编译工具5 JDK JRE JVM xff08 java虚拟环境 xff09 61 61 6 变量命名规则 61 61 7 变量的作用域8 数据类型9 进
  • JAVASE基础(二)

    这里写目录标题 JAVASE基础11 科学计数法12 编码和字符集12 编译格式问题13 类型转换类型级别自动类型转换强制类型转换特殊情况 14 final修饰符a 修饰变量b 修饰方法c 修饰类 15 scanner使用16 两个数交换引
  • 关于gcc编译 -I -L -l的使用

    gcc o hello hello c I home hello include L home hello lib lworld 参数说明 xff1a I home hello include表示将 home hello include 目
  • Matlab彩色图像的rgb分量获取,彩色通道互换

    1 原图像 2 matlab代码 xff0c 将图像的绿色和蓝色通道进行互换 A 61 imread 39 花朵 jpg 39 h w d 61 size A R 61 A 1 获取红色分量 G 61 A 2 获取绿色分量 B 61 A 3
  • 使用Xavier读取RealSense D435i的踩坑经历

    由于项目需要 xff0c 最近开始研究通过Xavier运行VINS的方法 xff0c 使用的传感器是Intel的RealSense xff0c 但是Xavier对RealSense的支持却不怎么好 xff0c 下面介绍一下躲坑方法 xff0
  • 宏函数详解

    宏函数 xff1a STL模板 实现函数的复用性 函数 xff1a 可以传递参数 但是不能将类型作为参数传递 例如 xff1a 一个开辟内存的函数 xff1a define Malloc type size type malloc size
  • UBUNTU将新路径添加到ROS_PACKAGE_PATH中。

    first 查看路径 chen 64 chen HP echo ROS PACKAGE PATH opt ros indigo share opt ros indigo stacks 添加 chen 64 chen HP echo 34 e
  • Visual Studio实现多核并行编译

    Visual Studio 大工程项目的编译时间较长 xff0c 可以利用多核CPU的优势 xff0c 实现并行编译 xff0c 设置并行编译方法示例如下 xff1a 1 在 ClassView 中选取某项目的 Properties xff
  • 五参数超声波风速风向传感器

    五参数超声波风速风向传感器介绍风速风向基于超声波原理研发的风速风向测量仪器 xff0c 利用发送的声波脉冲 xff0c 测量接收端的时间或频率 xff08 多普勒变换 xff09 差别来计算风速和风向 该传感器可以同时测量风速 xff0c
  • Postman 的使用教程(详细)

    Postman 使用教程 1 是什么 Postman 是一个接口测试工具软件 xff0c 可以帮助开发人员管理测试接口 官网 xff1a https www getpostman com 2 安装 建议通过官网下载安装 xff0c 不要去那
  • 《Qt 5.9 C++开发指南》第3章 Qt类库概述【详细摘要】

    Qt是一个用标准C 43 43 编写的跨平台开发类库 xff0c 它对标准C 43 43 进行了扩展 xff0c 引入了元对象系统 信号与槽 属性等特性 xff0c 使得应用程序开发变得更高效 本章介绍Qt的这些核心特点 xff0c 对于理