Qt中Q PROPERTY定義屬性以及屬性的使用

2021-06-12 05:30:56 字數 1045 閱讀 7255

q_property(type name 

read getfunction //屬性名

[write setfunction] //讀函式

[reset resetfunction]

[notify notifysignal]

[designable bool]

[scriptable bool]

[stored bool]

[user bool]

[constant]

[final])

其實不知道這個定義中屬性name是幹什麼的,網上搜的都說是註冊到元物件系統中,使用setproperty能夠直接訪問name,然後通常在類的私有成員裡再定義乙個m_name,用getfunction讀m_name,用setfunction設定m_name,那這樣子跟name有什麼關係。

我是這樣理解的,q_property只是乙個宣告,與name相關的是get/set這組函式,name雖然能在designer中直接使用,但還是通過get/set來實現的,其實name的值就是讀函式get的返回值,不知道這樣理解對不對,暫時這麼理解,回頭整理好了思路或者有更好的想法再來完善

上面說的類中定義的乙個資料成員m_name,其實這個變數跟q_property定義的name沒什麼關係,name的值就是你read函式中的值,如果你在read函式關聯了變數m_name,當然就name就與m_name有關係,如果沒關聯,當然也就沒關係

在學習的過程中,一直找不到notify這個signal是在**發射的,學習了很久才發現自己一直都被繞進去了,現在終於想通了,這個signal的發射也是手動新增的,一般來說是在setfunction中發射的。

原來,getfunction/setfunction/notifysignal都是本來已經存在的東西也就是說是你自己在類裡邊定義的東西,q_property只是將他們註冊到元物件系統中,並且起了個名字叫name,使之能夠使用元物件系統操作name,包括在designer中,qml中,都可以直接用name這個屬性,但是在c++中的讀寫只能使用get/set了

QT之結構 Q PROPERTY概念

qt提供了乙個成熟的屬性系統,但是作為乙個跨平台的且與編譯器無關的庫,qt不依賴於非標準的編譯器功能例如 property or property qt的強大之處在於它可以支援任何標準的c 編譯器。qt是基於 meta object system 元物件 和signals and slots 訊號槽...

QT之Qt之Q PROPERTY巨集理解

qt中的q property巨集在qt中是很常用的,那麼它有什麼作用呢?qt提供了乙個絕妙的屬性系統,q property 是乙個巨集,用來在乙個類中宣告乙個屬性property,由於該巨集是qt特有的,需要用moc進行編譯,故必須繼承於qobject類。q property type name r...

在QT4中使用QTableView製作屬性編輯器

最近在用qt寫的乙個程式中,需要乙個對大量引數進行設定的功能。過去用delphi的經驗是,盡量不要使用qlistview和tgrid來實現,因為涉及到控制項的對齊,介面的重繪等,反而使簡單問題變得複雜。因此這次用qt寫程式時也想當然,用控制項陣列的方式來解決。很快程式寫好了,介面如下 顯示出的效果還...