在QML中創建第一個字母大寫的文件時,您正在創建一個組件。組件是使用OOP聚合(而不是子類)實現的。這意味着,如果我寫
// MyButton.qml
import QtQuick 2.0;
Rectangle {
id: base;
width: 120;
height: 40;
color: "lightgray";
Text {
text: "foobar";
anchors.centerIn: parent;
}
}
...我還沒有子類長方形,我只是創建了一個包含一個矩形作爲根對象,而且它configurates以某種方式的組成部分,並在其中添加文本對象。
一旦一個組件被創建,它可以被簡單地寫實例化:
MyComponent { id: myNewInstance; }
因爲這是它在QML的方式。
組件名稱是一種類的(但不是在C++或JS的方式來定義的話),它也可以用來作爲一種用於一個屬性:
property MyComponent theComponent : myNewInstance;
然後,它可以保持使用給定組件創建的對象的ID,其行爲有點像C/C++指針:該屬性包含指向實際對象的鏈接。
但由於道路QML設計,即使是比子類更多的聚集,自定義組件的根對象的類型的屬性也可以按住派生組件的ID,在我的情況:
property Rectangle theComponent : myNewInstance;
會工作,但如果我嘗試放置一個圖像或文本或其他東西的ID,QML引擎會拋出不兼容的類型錯誤。
我希望它能幫助你。
你爲什麼標記這個C++? –
是的,我可以刪除,但我認爲標記面向對象的語言給這個問題更多的迴應。 – Mahesh
@Maheshthere是一個'oop'標籤,可以用來替代。 –