Я использую Qt 5.4.1.
В настоящее время я настраиваю некоторые кнопки в QML. Я хочу, чтобы для некоторых кнопок было похожее поведение состояния - как мне избежать повторения больших фрагментов очень похожего кода через QML?
Rectangle {
id: songFilterButton
x: 0; width: 80
y: 0; height: 60
Text {
anchors.centerIn: parent
text: "Songs"
}
state: "on"; states: [
State {
name: "on"
PropertyChanges{ target: songFilterButton; color: "steelblue" }
},
State {
name: "on"
PropertyChanges{ target: songFilterButton; color: "white" }
}
]
MouseArea { id: region; anchors.fill: parent; onClicked: songFilterButton.toggle() }
function toggle() {
if(state == "on") { state = "off" } else { state = "on" }
}
}
Это было бы довольно много кода, чтобы повторить для нескольких кнопок, и каждый раз, когда я добавляю функциональность кнопки (например, отправка сигналов на C++ и другие действия), мне пришлось бы делать это несколько раз...
Я прочитал ссылку, предоставленную MrEricSir, и создал HKRadioButton.qml со следующим кодом:
import QtQuick 2.0
Rectangle {
property string text: label.text
Text {
id: label
anchors.centerIn: parent
}
state: "on"; states: [
State {
name: "on"
PropertyChanges{ target: songFilterButton; color: "steelblue" }
},
State {
name: "off"
PropertyChanges{ target: songFilterButton; color: "white" }
}
]
MouseArea { anchors.fill: parent; onClicked: parent.toggle() }
function toggle() {
if(state == "on") { state = "off" } else { state = "on" }
}
}
В моем основном файле QML у меня есть
HKRadioButton {
id: songFilterButton
x: 0; width: 80
y: 0; height: 60
text: "Songs"
}
Я получаю поведение (изменение состояния), но не текст...