Увеличить свойство QML типа верхнего уровня в дочернем типе

#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)
    }
}