Qt-Q_ENUM宏和QMetaEnum類

Q_ENUM是一個宏定義,它的作用是將一個枚舉類型注冊到元對象系統,從而能夠通過QMetaEnum類獲得一些關于enum類型的一些信息,例如獲取enum類型的名稱字符串,enum值和字符串互相轉換,enum類型保存在QVariant中,enum值的個數,qDebug()打印enum值名稱等等。
用法:在一個繼承于QObject的子類中聲明enum,然后在定義后面使用Q_ENUM宏注冊enum類型。如下:

class MyClass : public QObject
{Q_OBJECTpublic:MyClass(QObject *parent = nullptr);~MyClass();enum Priority { High, Low, VeryHigh, VeryLow };Q_ENUM(Priority)void setPriority(Priority priority);Priority priority() const;
};

隨后通過QMetaEnum獲取enum類型的相關信息。

QMetaEnum metaEnum = QMetaEnum::fromType<MyClass ::Priority >();
qDebug() << metaEnum.enumName();  // Priority
qDebug() << metaEnum.keyCount();  // 4
QString s = metaEnum.valueToKey(MyClass::Priority::Low;  // Low
int p = metaEnum.keyToValue(s);  // 1
MyClass::Priority e = (MyClass::Priority)p;
qDebug() << e; // 打印MyClass::Low而不是1
QVariant v = QVariant::fromValue(e);  // 保存在QVariant中

使用Q_ENUM聲明的枚舉類型已經在元對象系統中注冊,不再需要使用Q_DELCARE_METATYPE。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/73150.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/73150.shtml
英文地址,請注明出處:http://en.pswp.cn/web/73150.shtml

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

相關文章

MongoDB 配合python使用的入門教程

MongoDB 入門教程 1. 安裝 MongoDB 首先&#xff0c;你需要在你的機器上安裝MongoDB。你可以從 MongoDB官網 下載并安裝 Community 版本。安裝完成后&#xff0c;啟動MongoDB服務。 # 在Linux/Mac上啟動MongoDB mongod# 在Windows上&#xff0c;你可以通過Windows服務啟動Mo…

【云馨AI-大模型】大模型的開發和應用中,Python、PyTorch和vLLM關系概括

說明 1. Python 定位&#xff1a;基礎編程語言。作用&#xff1a;Python 是大模型生態系統的核心語言&#xff0c;幾乎所有深度學習框架&#xff08;如 PyTorch、TensorFlow&#xff09;和工具鏈&#xff08;如 vLLM&#xff09;都通過 Python 接口提供服務。特點&#xff1a…

西門子200smart之modbus_TCP(做主站與第三方設備)通訊

西門子200smart做MODBUS_TCP主站通訊,只有一個指令。設置相關參數即可完成讀寫操作。整 個過程非常復雜,操作非常嚴謹。此次,我們使用匯川EASY系列PLC做從站,完成演示。關于匯川案例的演示,詳見匯川EASY系列之以太網通訊(MODBUS_TCP做從站)-CSDN博客 關于主站和從站的介…

緩存設計模式

緩存設計模式&#xff08;Cache Design Pattern&#xff09;是一種用于存儲和管理頻繁訪問數據的技術&#xff0c;旨在提高系統性能、降低數據庫或后端服務的負載&#xff0c;并減少數據訪問延遲。以下是幾種常見的緩存設計模式&#xff0c;并用 Python Redis 進行示例代碼實現…

Java算法隊列和棧經常用到的ArrayDeque

主要是記錄一下add&#xff0c;push&#xff0c;poll這三個常用api&#xff0c;因為這三個就是棧和隊列一念之差的關鍵 1.add(E e) 方法 ?作用&#xff1a;將元素添加到雙端隊列的尾部?&#xff08;等價于 addLast(E e)&#xff09;。?行為&#xff1a; ?成功時&#xff1…

機器學習——一元線性回歸(算法實現與評估)

一元線性回歸是統計學中最基礎的回歸分析方法&#xff0c;用于建立兩個變量之間的線性關系模型。 1. 模型表達式 一元線性回歸的數學模型為&#xff1a; &#xff1a;因變量&#xff08;預測值&#xff09;&#xff1a;自變量&#xff08;輸入變量&#xff09;&#xff1a;回…

Ubuntu下用QEMU模擬運行OpenBMC

1、前言 在調試過程中&#xff0c;安裝了很多依賴庫&#xff0c;具體沒有記錄。關于kvm&#xff0c;也沒理清具體有什么作用。本文僅記錄&#xff0c;用QEMU成功的將OpenBMC跑起來的過程&#xff0c;做備忘&#xff0c;也供大家參考。 2、環境信息 VMware Workstation 15 Pro…

Gradle/Maven 本地倉庫默認路徑遷移 (減少系統磁盤占用)

Gradle 配置環境變量 GRADLE_USER_HOME&#xff0c;如D:/.gradle同時將 %userprofile%/.gradle 移動到配置路徑 Maven 修改settings.xml文件&#xff0c;localRepository同時將 %userprofile%/.m2/repository 移動到配置路徑 IDEA默認用的bundle maven, 路徑為安裝目錄下 p…

MinGW與使用VScode寫C語言適配

壓縮包 通過網盤分享的文件&#xff1a;MinGW.zip 鏈接: https://pan.baidu.com/s/1QB-Zkuk2lCIZuVSHc-5T6A 提取碼: 2c2q 需要下載的插件 1.翻譯 找到VScode頁面&#xff0c;從上數第4個&#xff0c;點擊擴展&#xff08;以下通此&#xff09; 搜索---Chinese--點擊---安裝--o…

【C++初階】從零開始模擬實現vector(含迭代器失效詳細講解)

目錄 1、基本結構 1.1成員變量 1.2無參構造函數 1.3有參構造函數 preserve()的實現 代碼部分&#xff1a; push_back()的實現 代碼部分&#xff1a; 代碼部分&#xff1a; 1.4拷貝構造函數 代碼部分&#xff1a; 1.5支持{}初始化的構造函數 代碼部分&#xff1a; …

Java實習生面試題(2025.3.23 be)

一、v-if與v-show的區別 v-show 和 v-if 都是 Vue 中的條件渲染指令&#xff0c;它們的主要區別在于渲染策略&#xff1a;v-if 會根據條件決定是否編譯元素&#xff0c;而 v-show 則始終編譯元素&#xff0c;只是通過改變 CSS 的 display 屬性來控制顯示與隱藏。 二、mybatis-…

stm32標準庫開發需要的基本文件結構

使用STM32標準庫&#xff08;STM32 Standard Peripheral Library&#xff0c;SPL&#xff09;開發時&#xff0c;項目中必須包含一些必要的文件&#xff0c;這些文件確保項目能夠正常運行并與MCU硬件交互。以下詳細說明&#xff1a; 一、標準庫核心文件夾說明 使用標準庫開發S…

學生管理系統(需求文檔)

需求&#xff1a; 采取控制臺的方式去書寫學生管理系統 分析&#xff1a; 初始菜單&#xff1a; “----------歡迎來到java學生管理系統----------” “1:添加學生” “2&#xff1a;刪除學生” “3&#xff1a;修改學生” “4&#xff1a;查詢學生” “5&#xff1a;…

Java算法OJ(13)雙指針

目錄 1.前言 2.正文 2.1快樂數 2.2盛最多水的容器 2.3有效的三角形的個數 2.4和為s的兩個數 2.5三數之和 2.6四數之和 3.小結 1.前言 哈嘍大家好吖&#xff0c;今天繼續加練算法題目&#xff0c;一共六道雙指針&#xff0c;希望能對大家有所幫助&#xff0c;廢話不多…

SpringBoot分布式定時任務實戰:告別重復執行的煩惱

場景再現&#xff1a;你剛部署完基于SpringBoot的集群服務&#xff0c;凌晨3點突然收到監控告警——優惠券發放量超出預算兩倍&#xff01;檢查日志發現&#xff0c;兩個節點同時執行了定時任務。這種分布式環境下的定時任務難題&#xff0c;該如何徹底解決&#xff1f; 本文將…

MySQL 設置允許遠程連接完整指南:安全與效率并重

一、為什么需要遠程連接MySQL&#xff1f; 在分布式系統架構中&#xff0c;應用程序與數據庫往往部署在不同服務器。例如&#xff1a; Web服務器&#xff08;如NginxPHP&#xff09;需要連接獨立的MySQL數據庫數據分析師通過BI工具直連生產庫多服務器集群間的數據同步 但直接…

系統架構書單推薦(一)領域驅動設計與面向對象

本文主要是個人在學習過程中所涉獵的一些經典書籍&#xff0c;有些已經閱讀完&#xff0c;有些還在閱讀中。于我而言&#xff0c;希望追求軟件系統設計相關的原則、方法、思想、本質的東西&#xff0c;并希望通過不斷的學習、實踐和積累&#xff0c;提升自身的知識和認知。希望…

動態規劃-01背包

兜兜轉轉了半天&#xff0c;發現還是Carl寫的好。 看過動態規劃-基礎的讀者&#xff0c;大概都清楚。 動態規劃是將大問題&#xff0c;分解成子問題。并將子問題的解儲存下來&#xff0c;避免重復計算。 而背包問題&#xff0c;就是動態規劃延申出來的一個大類。 而01背包&…

使用VS2022編譯CEF

前提 選擇編譯的版本 CEF自動編譯&#xff0c;在這里可以看到最新的穩定版和Beta版。 從這里得出&#xff0c;最新的穩定版是134.0.6998.118&#xff0c;對應的cef branch是6998。通過這個信息可以在Build requirements查到相關的軟件配置信息。 這里主要看Windows下的編譯要…

C++20:玩轉 string 的 starts_with 和 ends_with

文章目錄 一、背景與動機二、string::starts_with 和 string::ends_with&#xff08;一&#xff09;語法與功能&#xff08;二&#xff09;使用示例1\. 判斷字符串開頭2\. 判斷字符串結尾 &#xff08;三&#xff09;優勢 三、string_view::starts_with 和 string_view::ends_w…