QML类型系统
前言
前一篇文章已經介紹了 QML 的基本類型,這里來介紹 QML 類型系統,包含了所有的在 QML 中可使用的類型。
可以再 QML 中使用的類型包含以下幾種:
由 QML 語言提供的基本類型
從 C++中注冊成 QML 可用的類型
由 QML 模塊提供的類型
無論類型定義來自何處,引擎都將對屬性和這些類型的實例強制執行類型安全檢查。
基本類型
QML 語言內置支持各種基本類型,包含整型,浮點型,字符串以及布爾型等等,對象可以具有這些類型的屬性,并且這些類型的值可以作為參數傳遞給對象的方法使用。
關于基本類型,前面已經介紹過,文章在這里
JavaScript類型
QML引擎支持JavaScript對象和數組??梢允褂梅盒蛌ar類型創建和存儲任何標準JavaScript 類型。
例如,標準Date和Array類型可用,如下所示:
QML對象類型
QML對象類型是可以從中實例化QML對象的類型。例如,Rectangle是一種QML對象類型:它可用于創建Rectangle類型對象。這不能用諸如int和之類的原始類型來完成bool,它們用于保存簡單數據類型而不是對象。
QML對象類型派生自QtObject,由QML模塊提供。應用程序可以導入這些模塊以使用它們提供的對象類型。該QtQuick模塊提供了在QML中創建用戶界面所需的最常用對象類型。
最后,每個QML文檔都隱式定義了一個QML對象類型,可以在其他QML文檔中重用。
從QML定義對象類型
通過QML文檔定義對象類型
要創建對象類型,應將QML文檔放入名為 .qml的文本文件中,其中是所需的類型名稱。類型名稱具有以下要求:
它必須由字母數字字符或下劃線組成。
它必須以大寫字母開頭。
然后,該文檔被引擎自動識別為QML類型的定義。此外,在解析QML類型名稱時,以這種方式定義的類型會自動提供給引擎在直接目錄中搜索的同一目錄中的其他QML文件。
使用組件定義匿名類型
從QML中創建對象類型的另一種方法是使用Component類型。這允許在QML文檔中內聯定義類型,而不是在文件中使用單獨的文檔.qml。
Item {id: rootwidth: 500; height: 500Component {id: myComponentRectangle { width: 100; height: 100; color: "red" }}Component.onCompleted: {myComponent.createObject(root)myComponent.createObject(root, {"x": 200})} }這里的myComponent對象本質上定義了一個匿名類型,可以使用Component :: createObject實例化該匿名類型以創建此匿名類型的對象。
內聯組件共享常規頂級組件的所有特征,并使用與import包含QML文檔相同的列表。
從C ++定義對象類型
C ++插件編寫者和應用程序開發人員可以通過Qt QML模塊提供的API注冊在C ++中定義的類型。存在各種注冊功能,每個功能允許實現不同的用例。有關這些注冊函數的詳細信息,以及將自定義C ++類型公開給QML的詳細信息,請參考這里。
https://blog.csdn.net/luoyayun361/article/details/80532594
https://blog.csdn.net/luoyayun361/article/details/80544906
總結
- 上一篇: QML和C ++之间的数据类型转换---
- 下一篇: QML UI 与逻辑分开