Dynamická vlastnosť názov úlohy vo vnútri delegáta

0

Otázka

Snažím sa, aby Nastavení objektu vnútri delegát Repeater, takže môžem uložiť hodnotu SpinBox. Avšak, nemôžem prísť na to, ako dynamicky nastaviť vlastnosť alias meno.

To, čo chcem dosiahnuť, je mať majetku alias názov byť rovnaké ako modelData. Napríklad, pre item1: "majetok alias item1: box.hodnota"; pre item2: "majetok alias item2: box.hodnota", atď.

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

Vyššie uvedený kód generuje nasledujúce nastavenia, a je obísť to, čo som chcel urobiť:

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

To, čo chcem, je jednej kategórii s hodnotami, tak ako:

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

Najlepšiu odpoveď

1

Pre tento prípad nie je možné použiť vlastnosti, ale value() a setValue() metódy:

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 perfektne. Jediné, čo som mohol spomenúť, je, že som nastaviť onValueChanged majetku políčko, ak chcete uložiť nastavenia, ak chcete replikovať alias správanie.
Vlad

@Vlad Áno, viem, som sa chystal, ak ju chcete pridať, ale IMO je potrebné uložiť ich na všetky časy, som radšej, že náklad je na začiatku a uložiť na konci.
eyllanesc

V iných jazykoch

Táto stránka je v iných jazykoch

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