子类型中顶级类型的增量 QML 属性

Increment QML property of top-level type in child type

我是 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 开始。我尝试在代码中使用信号 itemAdded 并重新分配 buttonIndex 的值每次递增 1 但这没有用任何一个。而且我还需要存储 Button 类型的 buttonIndex,例如“item_device_button_1”。知道如何解决这个问题吗?

如@folibis 所述,您无需为此创建自己的 属性。中继器(和 ListViews 等)为委托人提供了一个名为 index 的 属性 访问权限,它已经完全满足您的要求。该索引是从 0 开始的,因此如果您希望它从“1”开始,则只需添加 +1。

Repeater {
    Button {
        text: qsTr("Device ") + (index + 1)
    }
}