2016-12-18 71 views
0

我想爲Raspberry PI 2(Linux/Raspbian)開發相對簡單的基於對話框的GUI,這就是爲什麼想要從基本/核心功能開始學習Qt的原因。 RTFM,我知道。所以我read one of them,說實話理解得很少。關於Qt屬性的問題

  1. 我腦海中最大的問題:爲什麼它值得一讀? Qt屬性的目的是什麼?他們有什麼好處?
  2. 它們是如何在內部工作以及從編寫代碼的角度出發的。
  3. 什麼是內存和性能成本?是否有必要使用它們?如果沒有,考慮到我的使用情況,是否值得使用它們?
+0

如果您沒有任何屬性用例,您爲什麼要閱讀該章節? 也許首先閱讀如何創建用戶界面的章節,例如http://doc.qt.io/qt-5/gettingstartedqt.html –

回答

2
  1. 屬性用於通過標準的通用接口讀取的對象/寫值。需要與腳本引擎(QtScript或QtQml),窗口小部件設計器,遠程對象接口(QtDBus,QtRemoteObjects,QtWebChannel)接口。

  2. 大多數屬性通過普通的getter/setter函數實現,然後綁定到屬性名稱並使用宏Q_PROPERTY向屬性系統註冊。或者,屬性名稱可以綁定到成員變量。使用通用property()setProperty() API的讀取/寫入權限是重新路由到調用註冊的getter/setter或註冊的成員變量。

  3. 屬性信息作爲QMetaProperty存儲在「staticMetaObject」類中,通過屬性API進行的訪問將引起基於屬性名稱的查找。 您的使用案例似乎不需要使用屬性。

另一種使用情況下,如由庫巴在註釋所提到的,是附加數據,以基於QObject對象,而不修改它們。

這些屬性,即所謂的「動態屬性」,處理方式稍有不同。取代getter/setter函數或成員變量,它們存儲在通用內部存儲中,當前爲QVector<QVariant>

+0

不要忘記提及允許您將任意數據添加到任何對象的動態屬性。這允許代碼解耦:代碼A可以用代碼B「標記」代碼B中的對象和自定義數據,而不必修改代碼B. –