qt提供乙個q_property()的巨集來定義屬性:
read
write
member:指定乙個成員變數與屬性的關聯,成為可讀可寫屬性,無需子啊設定read,write屬性
reset:可選,設定乙個屬性預設值
notify:可選,設定乙個訊號,屬性變換的時候發射訊號
designable:是否在」設計"裡面可見,預設可見(true)
constant:表示乙個常數,不能喝write和notify共存
final:表示定義的屬性不能被過載
例子:
q_property
(bool enabled read isenabled write setenabled)
利用property()函式來讀屬性
利用setproperty()函式來改變屬性值
例子:
qpushbutton *but =
newqpushbutton()
;but-
>
setparent
(this);
qobject *object = but;
qdebug()
<< object-
>
property
("text");
//qvariant(qstring, "")
object-
>
setproperty
("text"
,"測試");
qdebug()
<< object-
>
property
("text");
//qvariant(qstring, "測試")
qobject::setproperty()函式可以在類執行的時候定義乙個新的屬性,稱之為動態屬性。動態屬性是針對類的例項定義的。
用q_classinfo()可以為類新增「名稱-值」資訊,如:`
class
qmyclass
:public qobject
定義了附加資訊後,可以通過classinfo(int)來獲取某個附加資訊,函式定義如下:
qmetaclassinfo qmetaobject::
classinfo
(int index)
const
例子:
/***********************************
在這之先定義乙個類myclass繼承qobject
*class myclass : public qobject
;*************************************/
//定義乙個物件
myclass *myclass=
new myclass;
//列印附加資訊
qdebug()
<< myclass-
>
metaobject()
->
classinfo(0
).name()
;//version
qdebug()
<< myclass-
>
metaobject()
->
classinfo(0
).name()
;
注意:
需要新增標頭檔案
#include
#include
QT 屬性系統
最近學習了python 的描述器,想起之前學過的qt 的屬性系統,特此過來記錄一下。qt的屬性系統需要借助元物件來實現 q property type name read getfunction write setfunction reset resetfunction notify notifys...
Qt屬性系統
qt提供了一套和其他通用編譯器提供商所提供的屬性系統類似的屬性系統 然而,作為乙個獨立於編譯器和平台的庫,qt不能依賴像 property或者 property 那樣的非標準編譯器特徵。qt的解決方案是在支援任意標準平台上的c 編譯器的基礎上進行工作。它基於元物件系統,元物件系統也通過訊號和槽提供物...
6 Qt 之屬性系統
qt提供乙個類似於其它編譯器 商提供的複雜屬性系統 property system 然而,作為乙個編譯器和平台無關的庫,qt不能夠依賴於那些非標準的編譯器特性,比如 property或者 property qt的解決方案適用於qt支援平台下的任何標準c 編譯器。它依賴於元物件系統 meta obje...