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.pswp.cn/web/45983.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/45983.shtml
英文地址,請注明出處:http://en.pswp.cn/web/45983.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

數據可視化在智慧醫療中的重要應用

在現代智慧醫療的推動下&#xff0c;數據可視化技術正日益成為醫療領域的重要工具。通過將復雜的醫療數據轉換為直觀的圖表和圖形&#xff0c;數據可視化不僅提升了醫療服務的效率&#xff0c;還極大地改善了患者的就醫體驗。 在智慧醫療中&#xff0c;數據可視化首先在電子病歷…

客流統計系統優化景區服務流程,增強游客滿意度

在當今旅游業蓬勃發展的時代&#xff0c;景區面臨著越來越多的挑戰和機遇。如何提供更優質、更高效的服務&#xff0c;滿足游客日益增長的需求&#xff0c;成為了景區管理者們關注的焦點。客流統計系統作為一種創新的技術手段&#xff0c;正逐漸成為優化景區服務流程、增強游客…

MySQL主從同步的原理與思考

摘要 分析主從同步出現的原因&#xff0c;MySQL實現主從同步的原理&#xff0c;思考實現原理的局限性和優點 背景 在實際應用中主從同步常用于實現備份、負載均衡和高可用。數據冗余的目的是提高數據的安全性&#xff0c;避免因磁盤損壞導致數據丟失的問題。讀寫分離的目的是…

ubuntu系統Docker常用命令

1.查看docker是否開機啟動 sudo systemctl list-unit-files | grep enable|grep docker 2.設置開機啟動 sudo systemctl enable docker 3.關閉docker開機啟動 sudo systemctl disable docker 4.開啟docker服務 sudo service docker start 5.關閉docker服務 sudo servi…

基于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…

【仿真建模-anylogic】數據源組件

Author&#xff1a;趙志乾 Date&#xff1a;2024-07-16 Declaration&#xff1a;All Right Reserved&#xff01;&#xff01;&#xff01; 1. 簡介 仿真模型依賴的數據源通常有Excel文件、MySQL數據庫兩種&#xff1b;針對小數量、大數據量以及是否允許外部依賴等場景設計了一…

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更…

上海市計算機學會競賽平臺2022年10月月賽丙組門禁記錄

題目描述 小愛得到了某大樓一天內按時間順序記錄的&#x1d45b;n條門禁出入記錄&#xff0c;每條記錄由兩個字符串組成&#xff0c;第一個字符串為出入人員姓名&#xff0c;第二個字符串表示該人員進出狀態、為 enter 或 exit 中一項&#xff0c;其中 enter 為進入&#xff0…

鑫創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…

OpenResty使用Lua筆記

文章目錄 一、基礎1、常用2、使用局部變量3、模塊化 二、性能提升1、使用fft調用shell2、不要在循環中拼接字符串3、不要頻繁修改table4、不要在table中用nil5、做好異常處理6、ngx.var 的性能提升 三、拓展1、加載字符串為動態方法 一、基礎 1、常用 OpenResty 中文官網&…

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;將…