【问题标题】:Dynamic property name assignments inside delegate委托内的动态属性名称分配
【发布时间】:2021-12-30 16:28:08
【问题描述】:

我试图在中继器的委托中包含一个设置对象,以便我可以保存 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=""
...

【问题讨论】:

  • 你的问题不清楚
  • @eyllanesc 已编辑。希望现在更清楚了。
  • 我观察到您正在创建“n”个设置,我想您想要一个具有“n”个类别的设置,并且在每个类别中保存一个值,对吗?跨度>
  • 那种。查看上次编辑。

标签: qt qml qt6


【解决方案1】:

对于这种情况,您不能使用属性,只能使用 value()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

【讨论】:

  • 这非常有效。我唯一可以提到的是,我设置了框的 onValueChanged 属性以保存到设置以复制别名行为。
  • @Vlad 是的,我知道,我要添加它,但 IMO 没有必要一直保存它们,我更喜欢加载在开头并在结尾保存。跨度>
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-03-19
相关资源
最近更新 更多