在 QML 中,可以使用自定义类型来表示特定的数据结构或对象。要创建自定义类型,可以使用 QML 中的 QtObject 或 QObject 类作为基类,并添加自定义属性和方法。
以下是一个示例,展示如何创建一个名为 Person 的自定义类型,并在其他组件中使用它:
// Person.qml
QtObject {
property string name: ""
property int age: 0
function greet() {
console.log("Hello, my name is " + name + " and I am " + age + " years old.");
}
}
在上面的示例中,我们创建了一个名为 Person 的自定义类型,并添加了两个属性 name 和 age,以及一个方法 greet()。现在,我们可以在其他组件中使用 Person 类型的实例。
// Test.qml
import QtQuick 2.0
Rectangle {
width: 200
height: 200
property alias person: john
Person {
id: john
name: "John"
age: 30
}
Text {
text: john.name + " is " + john.age + " years old."
}
MouseArea {
anchors.fill: parent
onClicked: john.greet()
}
}
在上面的示例中,我们创建了 Test 组件,在 Test 组件内 Rectangle 组件中创建了一个 Person 类型的实例,并将其命名为 john。我们还在 Text 组件中使用了 john 的属性,并在 MouseArea 组件的 onClicked 事件中调用了 john 的 greet() 方法。
// Test2.qml
import QtQuick 2.0
Rectangle {
Test {
person {
name: "xxx"
}
}
}
在上面的示例中,创建了 Test2 组件,在 Test2 组件内使用 Test 组件,并通过 Test 组件属性别名 person 修改 Test 组件的 john 对象。
总结:我们可以在 QML 中创建自定义类型,并在其他组件中使用它们,从而实现类似继承的效果,父级组件的自定义类型对象的属性会覆盖子组件中的自定义类型对象的属性。如果父级组件的自定义类型对象的属性都不写则默认使用子组件中的自定义类型对象的属性或自定义类型属性默认值。