Dynamic property name úkoly uvnitř delegáta

0

Otázka

Snažím se zahrnují Nastavení objektu uvnitř delegát Opakovač tak, že jsem může zachránit hodnotu SpinBox. Nicméně, nemůžu přijít na to, jak dynamicky nastavit vlastnost název aliasu.

Co chci dosáhnout, je mít vlastnost alias jméno musí být stejné jako modelData. Například, pro položka1: "vlastnost alias položka1: box.hodnota"; pro item2: "vlastnost alias item2: box.hodnota", atd.

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

Kód výše vytvoří následující nastavení, a je práce kolem, aby to, co jsem chtěl udělat:

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

To, co chci, je jedna kategorie, s hodnotami, jako:

[category]
item1=""
item2=""
item3=""
...
qml qt qt6
2021-11-20 01:36:52
1

Nejlepší odpověď

1

Pro tento případ nelze použít vlastnosti ale value() a setValue() metody:

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

Výstup:

[category]
item1=6
item2=6
item3=4
item4=2
item5=2
2021-11-20 02:21:15

To funguje perfektně. Jediné, co bych mohl zmínit je, že jsem nastavil onValueChanged vlastnost box pro uložení nastavení replikovat alias chování.
Vlad

@Vlad Ano, já vím, chtěl jsem to přidat, ale IMO je zbytečné, aby je zachránil za všech okolností, jsem raději, že zatížení je na začátku a ušetřit na konci.
eyllanesc

V jiných jazycích

Tato stránka je v jiných jazycích

Русский
..................................................................................................................
Italiano
..................................................................................................................
Polski
..................................................................................................................
Română
..................................................................................................................
한국어
..................................................................................................................
हिन्दी
..................................................................................................................
Français
..................................................................................................................
Türk
..................................................................................................................
Português
..................................................................................................................
ไทย
..................................................................................................................
中文
..................................................................................................................
Español
..................................................................................................................
Slovenský
..................................................................................................................