2013-10-11 47 views
6

與QML使用Exposing Attributes of C++ Types to QML類的機會,必須QObject秒。任何機會,我可以使用非QObjects s(又名POCO,而不是從QObject派生,但註冊與Qt metasystem)?任何使用非QObject的類與QML

如果不是,有一個簡單的通用包裝系統,使我的對象QML兼容。我能想到的一點是將動態屬性添加到簡單的QObject

還是有辦法隱式轉換爲兼容的QML類型,所以我並不需要在所有的包裝?

+0

感謝upvoting!你去過Qt DevDays'13可能是在上週(在柏林)嗎?那我們可以見面了! – mlvljr

+0

感謝您的全面回答。我會將問題留待更多的日子,但可能會接受你的答案。順便說一句,我不在柏林。 –

+0

謝謝,我的郵件在配置文件中,我實際上想嘗試一下對自己做些試驗(如果我有足夠的時間);所以,如果你願意,我們可以嘗試一些事情。柏林活動很好:) – mlvljr

回答

2

這實際上是一個熱門話題。

我相信你可以註冊自己的莢,並通過他們周圍的ITO和QML側內(就像黑匣子 - W/O任何成員訪問,從來沒有嘗試過)。爲了訪問成員,可以使用一些獲取/設置包裝器代碼,無論是以QML單例中的方法的形式,還是有效用作每個實例包裝器的QtObject後代。

目前不支持動態屬性 - 你可以讓它們工作,可能有一些很奇怪的詭計,但它不會是值得的(但如果你不想綁定屬性,事情會得到要簡單得多,它仍然是QObject)。

隱式轉換意味着有某種預處理器(這可能是可行的,但會花費大量時間,並提供結果返回到Qt(並終生支持它))。

我會走這條路:

  • ,如果有問題的對象可以是QObject對象,衡量性能(如果它的確定,堅持下來)
  • 如果沒有,嘗試按值傳遞不透明莢,如果它工作,創建包裝腳手架,並看看它是否更快/比以前的選項提供更好的內存使用率
  • 如果不需要綁定到proerties,並且需要動態性,調查a)嵌套QVariants b)動態QObject屬性
  • 如果極限速度/內存要求應滿足,考慮寫一個工具,自動生成包裝和它掛鉤到Qt工程構建流水線

事情是,定製莢不享受同樣的支持水平內置的做,和

  • POD
  • 列表
  • 的QObject
  • :標準語言的做法是圍繞操縱垃圾收集QObject的情況下(由指針到處傳遞,當然),已經看過換改變的類型的屬性建
  • 變種(不看了成員的變化,IIRC)