Qt基础 | Qt全局定义 | qglobal头文件中的数据类型、函数、宏定义

文章目录

  • 一、数据类型定义
  • 二、函数
  • 三、宏定义

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

详细内容可参考:https://doc.qt.io/qt-5/qtglobal.html

一、数据类型定义

  为了确保在各个平台上各数据类型都有统一确定的长度,Qt为各种常见数据类型定义了类型符号。

typedef signed char qint8;         /* 8 bit signed */
typedef unsigned char quint8;      /* 8 bit unsigned */
typedef short qint16;              /* 16 bit signed */
typedef unsigned short quint16;    /* 16 bit unsigned */
typedef int qint32;                /* 32 bit signed */
typedef unsigned int quint32;      /* 32 bit unsigned */
typedef long long qint64;           /* 64 bit signed */
typedef unsigned long long quint64; /* 64 bit unsigned */
typedef qint64 qlonglong;
typedef quint64 qulonglong;typedef unsigned char uchar;
typedef unsigned short ushort;
typedef unsigned int uint;#if defined(QT_COORD_TYPE)
typedef QT_COORD_TYPE qreal;
#else
typedef double qreal;
#endif

qreal缺省是8字节 double 类型浮点数 ,如果 Qt 使用 -qreal float 选项进行配置,就是4字节 float 类型的浮点数。

二、函数

  QtGlobal头文件包含了一些常用函数的定义,这些函数多以模板类型作为参数,返回相应的模板类型,模板类型可以用任何其他类型替换。

QtGlobal中常用函数如下:

image-20240714145840177

image-20240714145903816

三、宏定义

  QtGlobal头文件定义了很多宏,常用的宏如下:

  • QT_VERSION

    • 宏说明:

      QT_VERSION 宏是一个预处理器指令,它提供了一种检查当前编译环境中 Qt 版本的方法。QT_VERSION 这个宏会展开为一个数值,格式是0xMMNNPP(MM是主版本号,NN是次版本号,PP是补丁号),它指定了Qt的版本号。例如,如果你的应用程序是针对Qt 4.1.2编译的,那么QT_VERSION宏将会展开为0x040102。

      可以使用QT_VERSION来使用在可用情况下的最新Qt特性

      示例:

      #if QT_VERSION >= 0x040100QIcon icon = style()->standardIcon(QStyle::SP_TrashIcon);
      #elseQPixmap pixmap = style()->standardPixmap(QStyle::SP_TrashIcon);QIcon icon(pixmap);
      #endif
      
    • 用途:

      使用 QT_VERSION 宏可以确保代码在不同版本的 Qt 上都能正确编译和运行。开发者可以根据 Qt 的版本特性编写条件代码,以利用新版本的功能,同时保持对旧版本的兼容性。

  • QT_VERSION_CHECK

    • 宏说明

      QT_VERSION_CHECK 这个宏将版本号的主版本号、次版本号和补丁号转换为一个整数,格式是0xMMNNPP(MM是主版本号,NN是次版本号,PP是补丁号)。

      通过比较 QT_VERSION(当前编译环境中的 Qt 版本)与 QT_VERSION_CHECK 宏生成的版本号,可以决定编译时包含哪些头文件或执行哪些代码。

      示例:

      #include <QtGlobal>#if (QT_VERSION >= QT_VERSION_CHECK(5, 0, 0))
      #include <QtWidgets>
      #else
      #include <QtGui>
      #endif
      
  • QT_VERSION_STR

    • 宏说明:

      QT_VERSION_STR 这个宏会展开为一个字符串,表示编译应用程序时所使用的 Qt 版本号。这个字符串通常包含主版本号、次版本号和补丁号,格式为 “X.Y.Z”,其中 X 是主版本号,Y 是次版本号,Z 是补丁号。

  • Q_BYTE_ORDER

    • 宏说明:

      Q_BYTE_ORDER 是 Qt 中的一个宏,用于确定系统在内存中存储数据时使用的字节序。字节序决定了多字节数据类型(如整数、浮点数等)在内存中的字节排列方式。有两种主要的字节序:

      • 大端序(Big-endian):高位字节(即"大端")存储在低地址处。
      • 小端序(Little-endian):低位字节(即"小端")存储在低地址处。

      Q_BYTE_ORDER 宏被 Qt 设置为 Q_LITTLE_ENDIANQ_BIG_ENDIAN 中的一个,以反映当前平台的字节序。

    • 用途:

      • 跨平台开发:在跨平台开发中,了解目标平台的字节序对于处理字节级别的数据交换非常重要。
      • 网络通信:在网络通信中,不同系统间的数据传输需要考虑字节序的差异,以确保数据的正确解析。
      • 文件格式:读写某些文件格式时,可能需要根据字节序调整数据的存储方式。
    • 示例:根据 Q_BYTE_ORDER 的值来执行不同的代码分支

      #if Q_BYTE_ORDER == Q_BIG_ENDIAN
      ...
      #endif#if Q_BYTE_ORDER == Q_LITTLE_ENDIAN
      ...
      #endif
      
    • 注意事项:

      • 大多数现代桌面和服务器系统(如 x86 和 x86_64 架构)使用小端序。
      • 某些嵌入式系统或特定的硬件平台可能使用大端序。
      • 在处理网络协议或与其他系统交换数据时,了解并正确处理字节序差异是非常重要的。
  • Q_BIG_ENDIAN

    • 宏说明

      Q_BIG_ENDIAN宏与 Q_BYTE_ORDER 宏进行比较,以确定系统的字节顺序。

  • Q_LITTLE_ENDIAN

    • 宏说明:

      Q_LITTLE_ENDIAN宏与 Q_BYTE_ORDER 宏进行比较,以确定系统的字节顺序。

  • Q_DECL_EXPORT和Q_DECL_IMPORT

    • 宏说明:

      在使用或设计共享库时,用于导入或导出库的内容

      Q_DECL_EXPORTQ_DECL_IMPORT 是 Qt 框架中用于处理共享库(shared libraries,也称为动态链接库 dynamic link libraries,DLLs)的宏。它们用于标识哪些符号(通常是类、函数或变量)应该被导出(export)或导入(import)到共享库中。

  • Q_UNUSED(name)

    • 宏说明:

      用来指示编译器某个参数在函数体中没有被使用。这主要用于两个场景:

      1. 避免编译器警告:当函数签名中包含参数,但这些参数在函数实现中并未使用时,某些编译器可能会发出未使用参数的警告。使用 Q_UNUSED 可以告诉编译器这些参数是故意不被使用的,从而避免这类警告。
      2. 保持有意义的参数名:即使参数在当前函数实现中没有使用,保留参数名也可能是有意义的,因为它们可以提供关于函数预期行为的信息,或者为将来可能的代码更改保留接口。使用 Q_UNUSED 可以在不使用参数的情况下保留这些有意义的参数名。
  • foreach(variable, container)

    • 宏说明:

      用于实现 Qt 的 foreach 循环。这个循环语法是 Qt 的一个特性,允许以一种简洁的方式遍历 Qt 容器(如 QListQVectorQString 等)。

      foreach 宏的使用方式如下:

      • variable:循环中当前元素的变量名或变量定义。
      • container:要遍历的 Qt 容器,其值类型应与变量的类型相对应。
    • 示例:

      QList<int> list;
      // 填充 list ...// 使用 foreach 宏遍历 list
      foreach(int number, list) {qDebug() << number;
      }
      
    • 注意事项:

      • foreach 宏可能会引起命名空间污染,因为它定义了一个全局的 foreach 标识符。如果你担心这个问题,可以通过在 Qt 的 .pro 文件中添加以下行来禁用 foreach 宏:

        CONFIG += no_keywords
        
      • 自 Qt 5.7 起,使用 foreach 宏被官方不推荐,因为它将在未来的 Qt 版本中被移除。Qt 推荐使用 C++11 引入的 for 循环语法作为替代

        QList<int> list;
        // 填充 list ...// 使用 C++11 的 range-based for loop 遍历 list
        for(int number : list) {qDebug() << number;
        }
        
  • forever

    • 宏说明:

      forever 这个宏提供了一种方便的方式来编写无限循环。如:

      forever {...
      }
      

      等价于

      for (;;) {...
      }
      
    • 注意事项:

      如果你担心命名空间污染,你可以通过在你的 .pro 文件中添加以下行来禁用这个宏:

      CONFIG += no_keywords
      
  • qDebug(const char *message, )

    • 宏说明:

      用于输出调试信息。允许开发者在开发过程中输出变量值、程序状态或其他信息,以便于调试应用程序。

      如果在编译时定义了 QT_NO_DEBUG_OUTPUT,则 qDebug 函数将不执行任何操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/web/45983.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

数据可视化在智慧医疗中的重要应用

在现代智慧医疗的推动下&#xff0c;数据可视化技术正日益成为医疗领域的重要工具。通过将复杂的医疗数据转换为直观的图表和图形&#xff0c;数据可视化不仅提升了医疗服务的效率&#xff0c;还极大地改善了患者的就医体验。 在智慧医疗中&#xff0c;数据可视化首先在电子病历…

客流统计系统优化景区服务流程,增强游客满意度

在当今旅游业蓬勃发展的时代&#xff0c;景区面临着越来越多的挑战和机遇。如何提供更优质、更高效的服务&#xff0c;满足游客日益增长的需求&#xff0c;成为了景区管理者们关注的焦点。客流统计系统作为一种创新的技术手段&#xff0c;正逐渐成为优化景区服务流程、增强游客…

MySQL主从同步的原理与思考

摘要 分析主从同步出现的原因&#xff0c;MySQL实现主从同步的原理&#xff0c;思考实现原理的局限性和优点 背景 在实际应用中主从同步常用于实现备份、负载均衡和高可用。数据冗余的目的是提高数据的安全性&#xff0c;避免因磁盘损坏导致数据丢失的问题。读写分离的目的是…

基于CNN的MINIST手写数字识别项目代码以及原理详解

文章目录 项目简介项目下载地址项目开发软件环境项目开发硬件环境前言一、数据加载的作用二、Pytorch进行数据加载所需工具2.1 Dataset2.2 Dataloader2.3 Torchvision2.4 Torchtext2.5 加载项目需要使用的库 三、加载MINIST数据集3.1 数据集简介3.2 数据预处理3.3 加载数据集 四…

2.10、matlab中字符、数字、矩阵、字符串和元胞合并为字符串并将字符串以不同格式写入读出excel

1、前言 在 MATLAB 中&#xff0c;可以使用不同的数据类型&#xff08;字符、数字、矩阵、字符串和元胞&#xff09;合并为字符串&#xff0c;然后将字符串以不同格式写入 Excel 文件。 以下是一个示例代码&#xff0c;展示如何将不同数据类型合并为字符串&#xff0c;并以不…

重生奇迹mu魔法师瞬间移动技能

瞬间移动是勇士大陆魔法师所拥有的一项技能。一开始&#xff0c;许多玩家对这种技能的用处感到困惑。实际上&#xff0c;这种技能只能在游戏中不同的位置间进行移动&#xff0c;不能随机传送到地图的其他坐标位置。 一位重生奇迹mu魔法师在PK中不小心使用了一项技能&#xff0c…

labview使用斑马打印机打印标签

使用ZebraDesigner 3设计标签样式 设计完成后打印至文件&#xff0c;生成prn文件 用记事本打开prn文件 ^MMT 标签撕下 ^MMP 标签剥离 按照需求替换FD--------^FS中间内容

路由上传一个ui_control参数(uint32类型)控制页面UI显隐

前言&#xff1a;传一个uint32类型的值&#xff0c;通过 按位或操作符&#xff08;|&#xff09;来设置ui_control的值&#xff0c;通过按位与操作符&#xff08;&&#xff09;来检测是否显示或隐藏 简单介绍一下两个概念&#xff1a; 按位与操作符和按位或操作符都是二进…

etcd的备份与恢复

一 为什么使用etcd 与ZooKeeper相比&#xff0c;etcd更简单&#xff0c;安装、部署和使用更加容易&#xff0c;并且etcd的某些功能是ZooKeeper所没有的。因此&#xff0c;在很多场景下&#xff0c;etcd 比ZooKeeper更受用户的青&#xff0c;具体表现在如下几个方面: 1 etcd更…

鑫创SSS1700USB音频桥芯片USB转IIS芯片

鑫创SSS1700支持IIC初始外部编&#xff08;EEPROM选项),两线串行总线&#xff08;I2C总线&#xff09;用于外部MCU控制整个EEPROM空间可以通过MCU访问用于主机控制同步的USB HID外部串行EEPROM&#xff08;24C02~24C16&#xff09;接口&#xff0c;用于客户特定的USB视频、PID、…

jmeter之变量随机参数化以及解决多线程不会随机变化

参考链接&#xff1a; https://www.cnblogs.com/Testing1105/p/12743475.html jmeter 使用random函数多线程运行时数据不会随机变化&#xff1f;_jmeter 线程组循环执行时 变量不变-CSDN博客 1、如下图所示&#xff0c;需要对请求参数 autor 和phone进行随机参数化 2、目前有…

MyBatis源码中的设计模式2

组合模式的应用 组合模式介绍 组合模式(Composite Pattern) 的定义是&#xff1a;将对象组合成树形结构以表示整体和部分的层次结构。组合模式可以让用户统一对待单个对象和对象的组合。 比如&#xff1a;Windows操作系统中的目录结构&#xff0c;通过tree命令实现树形结构展…

【系统架构设计师】十二、系统质量属性与架构评估(开发期质量属性|运行期质量属性|面向架构评估的质量属性|质量属性效用树|质量属性场景)

目录 一、软件系统质量属性 1.1 开发期质量属性 1.2 运行期质量属性 1.3 面向架构评估的质量属性 1.4 质量属性效用树 1.5 质量属性场景 1.5.1 可用性质量属性场景描述 1.5.2 可修改性质量属性场景描述 1.5.3 性能质量属性场景描述 相关推荐 历年真题练习 历…

【vue】输入框和文本域切换

输入框的样子 文本域的样子 当输入框出现滚动条的时候&#xff0c;就自动切换成文本域&#xff1b;当文本域到1行并且宽度小于输入框宽度时切换成输入框 <div class"left_box_inpt"><divclass"right_box_inpt":class"{notclickable: inputd…

Open3D 最小二乘法拟合点云平面

目录 一、概述 1.1最小二乘法原理 1.2实现步骤 1.3应用场景 二、代码实现 2.1关键函数 2.2完整代码 三、实现效果 3.1原始点云 3.2matplotlib可视化 3.3平面拟合方程 前期试读&#xff0c;后续会将博客加入该专栏&#xff0c;欢迎订阅 Open3D点云算法与点云深度学习…

【学术会议征稿】第四届人工智能、虚拟现实与可视化国际学术会议(AIVRV 2024)

第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09; 2024 4th International Conference on Artificial Intelligence, Virtual Reality and Visualization 第四届人工智能、虚拟现实与可视化国际学术会议&#xff08;AIVRV 2024&#xff09;将…

简约唯美的404HTML源码

源码介绍 简约唯美的404HTML源码,很适合做网站错误页,将下面的源码放到一个空白的html里面,然后上传到服务器里面即可使用 效果预览 完整源码 <!DOCTYPE html> <html><head><meta charset="utf-8"><title>404 Error Example<…

第二证券:市场估值依然处于较低区域 适合中长期布局

A股中报成绩预告显示相比2024Q1&#xff0c;2024Q2企业产品销量或订单已有回暖&#xff0c;但价格反转暂未大面积到来&#xff0c;“量增价平、部分板块以价换量”是2024H1 A股成绩预告较显着的量价特征&#xff0c;这与微观库存周期有待回暖相匹配。此外中游部分环节出现不同程…

新版网页无插件H.265播放器EasyPlayer.js如何测试demo视频?

H5无插件流媒体播放器EasyPlayer属于一款高效、精炼、稳定且免费的流媒体播放器&#xff0c;可支持多种流媒体协议播放&#xff0c;支持H.264与H.265编码格式&#xff0c;性能稳定、播放流畅&#xff1b;支持WebSocket-FLV、HTTP-FLV&#xff0c;HLS&#xff08;m3u8&#xff0…

【Linux】进程信号 --- 信号产生

&#x1f466;个人主页&#xff1a;Weraphael ✍&#x1f3fb;作者简介&#xff1a;目前正在学习c和算法 ✈️专栏&#xff1a;Linux &#x1f40b; 希望大家多多支持&#xff0c;咱一起进步&#xff01;&#x1f601; 如果文章有啥瑕疵&#xff0c;希望大佬指点一二 如果文章对…