#qt #qml
#qt #qml
Вопрос:
Я новичок в Qt с QML. Я пытаюсь установить свойство в верхнем элементе с именем buttonIndex, чтобы дочерние элементы могли изменять свойство, увеличивая значение в элементе Button, чтобы имя переходило из «Устройства 1» -> «Устройства 15». Это мой код QML ниже:
Page {
id: page_device
width: 1024
height: 600
property int buttonWidth: 170;
property int buttonHeight: 100;
property int buttonIndex: 1;
header: Label {
id: label_header_devices
text: qsTr("Devices")
font.pixelSize: Qt.application.font.pixelSize * 2
padding: 20
}
Item {
id: item_devices
width: 300
height: 200
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
Column {
anchors.horizontalCenter: parent.horizontalCenter
anchors.verticalCenter: parent.verticalCenter
spacing: 10
Repeater {
id: item_devices_rows
model: 3
Row {
spacing: 10
Repeater {
id: item_devices_columns
model: 5
Button {
id: button_device_
width: buttonWidth
height: buttonHeight
text: qsTr("Device ") page_device.buttonIndex
Material.foreground: Material.Pink
enabled: false
hoverEnabled: false
// onClicked: Material.background = Material.Teal
}
}
}
}
}
}
}
Результат, который я получаю, нежелателен. Я получаю «Устройство 107», «Устройство 108», «Устройство 109» и т.д.. Мне нужно, чтобы оно было от 1 до 15. Я попытался использовать элемент signal, добавленный в код, и повторно присваивать значение buttonIndex для увеличения на 1 каждый раз, но это тоже не сработало. А также мне нужно сохранить этот buttonIndex для типа кнопки, такого как «item_device_button_1». Есть идеи, как это можно решить?
Комментарии:
1. На самом деле, вы можете использовать Repeater.index вместо того, чтобы изобретать его самостоятельно
Ответ №1:
Как упоминал @folibis, вам не нужно создавать для этого свое собственное свойство. Повторители (и ListViews и т. Д.) Предоставляют делегатам доступ к вызываемому свойству index
, которое уже выполняет именно то, что вы хотите. Индекс основан на 0, поэтому, если вы хотите, чтобы он начинался с ‘1’, просто добавьте 1.
Repeater {
Button {
text: qsTr("Device ") (index 1)
}
}