传说中的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怎么使用的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: ll和 amp amp c语言,ll 和
- 下一篇: CAD中焊接符号的使用及详解