本集合文章将长期更新一些qml代码中的技巧和问题
正文
有时候可能会遇到同一个qml文件中有多个相同的代码块,如下:
js
Column {
spacing: 10
anchors.leftMargin: 10
anchors.left: parent.left
GroupBox {
title: "GroupBox"
Layout.fillWidth: true
Column {
spacing: 10
Button {
id: _button
text: "Open Menu"
}
TextField {
id: _textField
width: 100
}
Text {
id: _text
text: qsTr("text")
}
}
}
GroupBox {
title: "GroupBox"
Layout.fillWidth: true
Column {
spacing: 10
Button {
// id: _button
text: "Open Menu"
}
TextField {
// id: _textField
width: 100
}
Text {
// id: _text
text: qsTr("text")
}
}
}
}
这样文件内代码量会大量多,且代码在修改时,也不容易定位代码位置。
可能大家都想到重新编写一个qml文件来实现这个GroupBox 里的内容,这确实是可行的,而且很多时候也是这么用的。可是我们可能只是在这个qml文件内使用这个组件,其它qml文件内都不需要使用,这时可以只在这个qml文件内定义一个组件,代码如下:
javascript
component MyGroupBox: GroupBox {
title: "GroupBox"
Layout.fillWidth: true
property alias button: _button
property alias textField: _textField
property alias text: _text
Column {
spacing: 10
Button {
id: _button
text: "Open Menu"
}
TextField {
id: _textField
width: 100
}
Text {
id: _text
text: qsTr("text")
}
}
}
Column {
spacing: 10
anchors.leftMargin: 10
anchors.left: parent.left
MyGroupBox {
button.onClicked: console.log("----")
textField.text: "Hello"
text.text: "Hello"
}
MyGroupBox {}
}
这样不止代码量少,而且可以很方便和编写代码