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中常用函数如下:
三、宏定义
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_ENDIAN
或Q_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_EXPORT
和Q_DECL_IMPORT
是 Qt 框架中用于处理共享库(shared libraries,也称为动态链接库 dynamic link libraries,DLLs)的宏。它们用于标识哪些符号(通常是类、函数或变量)应该被导出(export)或导入(import)到共享库中。
-
-
Q_UNUSED(name)
-
宏说明:
用来指示编译器某个参数在函数体中没有被使用。这主要用于两个场景:
- 避免编译器警告:当函数签名中包含参数,但这些参数在函数实现中并未使用时,某些编译器可能会发出未使用参数的警告。使用
Q_UNUSED
可以告诉编译器这些参数是故意不被使用的,从而避免这类警告。 - 保持有意义的参数名:即使参数在当前函数实现中没有使用,保留参数名也可能是有意义的,因为它们可以提供关于函数预期行为的信息,或者为将来可能的代码更改保留接口。使用
Q_UNUSED
可以在不使用参数的情况下保留这些有意义的参数名。
- 避免编译器警告:当函数签名中包含参数,但这些参数在函数实现中并未使用时,某些编译器可能会发出未使用参数的警告。使用
-
-
foreach(variable, container)
-
宏说明:
用于实现 Qt 的
foreach
循环。这个循环语法是 Qt 的一个特性,允许以一种简洁的方式遍历 Qt 容器(如QList
、QVector
、QString
等)。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
函数将不执行任何操作。
-