在 QML 中设置子项 属性 的正确方法
Proper way to set a child item property in QML
每个人都知道如何通过这些元素的背景 属性 为按钮、弹出窗口等设置背景。但是我想知道,我如何为自己的自定义元素创建这样一个 属性 呢?我找到了一种方法,但它看起来很丑陋,而且我似乎找不到定义了 属性 的按钮、弹出窗口等的 qml 代码。所以我玩了一下,想出了像这样使用绑定的想法:
Item {
id: root
property Item background: Rectangle {
color: "red"
}
Binding {
target: root.background
property: "parent"
value: root
}
Binding {
target: root.background
property: "anchors.fill"
value: root
when: root.background.parent == root
delayed: true
}
}
如前所述,如果您需要声明子项的许多属性,那看起来会很烦人。那么,Qt 是如何做到的或者正确的做法是什么?
// ItemWithBackground.qml
Item {
property alias background: backgroundLoader.sourceComponent
Loader {
id: backgroundLoader
anchors { fill: parent }
sourceComponent: Rectangle { color: 'red' } // default background implementation
}
}
// Usage example:
ItemWithBackground {
background: Rectangle {
color: 'green'
}
}
如果您使用的是最新的 Qt 版本,请查看使用内联组件。它们使您可以像这样轻松创建 API。
每个人都知道如何通过这些元素的背景 属性 为按钮、弹出窗口等设置背景。但是我想知道,我如何为自己的自定义元素创建这样一个 属性 呢?我找到了一种方法,但它看起来很丑陋,而且我似乎找不到定义了 属性 的按钮、弹出窗口等的 qml 代码。所以我玩了一下,想出了像这样使用绑定的想法:
Item {
id: root
property Item background: Rectangle {
color: "red"
}
Binding {
target: root.background
property: "parent"
value: root
}
Binding {
target: root.background
property: "anchors.fill"
value: root
when: root.background.parent == root
delayed: true
}
}
如前所述,如果您需要声明子项的许多属性,那看起来会很烦人。那么,Qt 是如何做到的或者正确的做法是什么?
// ItemWithBackground.qml
Item {
property alias background: backgroundLoader.sourceComponent
Loader {
id: backgroundLoader
anchors { fill: parent }
sourceComponent: Rectangle { color: 'red' } // default background implementation
}
}
// Usage example:
ItemWithBackground {
background: Rectangle {
color: 'green'
}
}
如果您使用的是最新的 Qt 版本,请查看使用内联组件。它们使您可以像这样轻松创建 API。