??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
函數將不執行任何操作。
-