委托内的动态 属性 名称分配

Dynamic property name assignments inside delegate

我试图在 Repeater 的委托中包含一个 Settings 对象,以便我可以保存 SpinBox 的值。但是,我不知道如何动态设置 属性 别名。

我想要实现的是让 属性 别名与 modelData 相同。例如,对于 item1:“属性 别名 item1:box.value”;对于 item2:“属性 别名 item2:box.value”,等等

Column {
    Repeater {
        model: ["item1", "item2", "item3", "item4", "item5"]
        delegate: RowLayout {
            Settings {
                fileName: "config"
                category: modelData
                property alias value: box.value
            }
            Label {
                text: modelData
            }
            SpinBox {
                id: box
            }
        }
    }
}

上面的代码生成了以下设置,并且是我想做的事情的变通方法:

[item1]
value=""
[item2]
value=""
[item3]
value=""
...

我想要的是具有值的单个类别,如下所示:

[category]
item1=""
item2=""
item3=""
...

对于这种情况,您不能使用属性,只能使用 value() and setValue() 方法:

import QtQuick
import QtQuick.Controls
import QtQuick.Layouts
import Qt.labs.settings

ApplicationWindow {
    width: 640
    height: 480
    visible: true

    readonly property var values: ["item1", "item2", "item3", "item4", "item5"]
    Settings {
        id: settings
        category: "category"
    }

    Column {
        Repeater {
            model: values
            delegate: RowLayout {
                id: row_layout
                Label {
                    text: modelData
                }
                SpinBox {
                    id: box
                }
                Component.onCompleted: box.value = settings.value(modelData, 0)
                Component.onDestruction: settings.setValue(modelData, box.value)
            }
        }
    }
}

输出:

[category]
item1=6
item2=6
item3=4
item4=2
item5=2