日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

传说中的Q_PROPERTY怎么使用

發布時間:2023/12/20 编程问答 22 豆豆
生活随笔 收集整理的這篇文章主要介紹了 传说中的Q_PROPERTY怎么使用 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.


Q_PROPERTY在QT中應用是非常廣泛的,而且比較好用。

這里看一下Q_PROPERTY的構成:

Q_PROPERTY(type name??
02. READ? getFunction? //屬性名?
03. [WRITE setFunction] //讀函數?
04. [RESET resetFunction]???????
05. [NOTIFY notifySignal]??
06. [DESIGNABLE bool]??
07. [SCRIPTABLE bool]??
08. [STORED bool]??
09. [USER bool]??
10. [CONSTANT]??
11. [FINAL])?

一個屬性行為類似于類里面的數據成員,但是他是卻可以通過Meta-Object System來訪問。
?
在外界看來,property跟類中數據成員沒有什么區別,但是還是有幾點不一樣,參考qt文檔,主要有以下幾點:
1.必須有一個read函數。它用來讀取屬性值。因此用Const限定。它的返回值類型必須為屬性類型或者屬性類型的引用或者指針。不能是其他類型例如:QWidget::hasFocus().?
2.有一個可選的write函數。它用來設置屬性值,它的返回值必須為void型,而起必須要含有一個參數。例如:QWidget::setEnabled()
3.一個reset函數能夠把property設置成其默認狀態,它也是可選的。復位功能必須返回void,并且不帶參數,

4.一個NOTIFY信號是可選的 。如果定義,它提供了一個信號這個信號在值發生改變時會自動被觸發。


5.如果定義了"STODE"屬性表明這是一直存在的。QWidget::minimumSize()
6.一個"DESIGNABLE"屬性表明該property能在GUI builder(一般為Qt Designer)可見

7 USER 屬性 表面是否可以被用戶所編輯

8? CONST 設定屬性是不可修改的 所以不能跟WRITE或者NOTIFY同時出現

9? FINAL 表明該屬性不會被派生類中重寫

好了,接下來我們舉例:

這是我定義的一個數據類

class TimeSleepConifg : public QObject//這里一定要注意,要使用 Q_PROPERTY必須繼承QObject,否則無法使用

{ Q_OBJECT//這個宏定義也是必須的 Q_PROPERTY(int m_time_cont READ timeCnt WRITE setTimeCnt NOTIFY timeCntChanged)// public: void setTimeCnt(int e)//寫函數 { m_time_cont = e; emit timeCntChanged();//這里觸發信號,主要前面要加emit } int timeCnt() const//讀函數 { return m_time_cont; ??? } void jsonFileWrite_T(QString Icont);//這個是我寫的從一個json文件里去解析 QString jsonFileRead_T();//這是json文件的解析并且將得到的值返回 TimeSleepConifg();//這是構造函數,在構造函數里面;setTimeCnt(jsonFileRead_T().toDouble()); //調用jsonFileRead_T返回的值賦值給m_time_cont這是給它賦值的過程 Q_SIGNAL void timeCntChanged();//這是信號,在setTimeCnt()函數中被調用,意思就是一旦值發生更改將觸發這個信號, //只要引用了m_time_cont的地方都發生更改 private: int m_time_cont;//這是定義的一個屬性變量在qml中我們要引用的,這里可以看到它是個Q_PROPERTY中?是一樣的 }; 那么,接下來我們看一下qml中是怎么用到的 Text{ id:text1 x:50 y:80 width: 63 height: 26 text:idRootPriv.m_vm.time_obj.m_time_cont;//這里就綁定了m_time_cont,只要它發生更改就會自動更改 //這里的time_obj是上面那個類實例后的指針,前面的是我管理的類你們可以不看。 verticalAlignment: Text.AlignTop horizontalAlignment: Text.AlignLeft }

QQ:609162385,希望能和大家交流交流






總結

以上是生活随笔為你收集整理的传说中的Q_PROPERTY怎么使用的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。