Dynamique de la propriété de l'affectation du nom à l'intérieur de délégué

0

La question

Je suis en train d'essayer d'inclure un objet de Paramètres à l'intérieur du délégué d'un Répéteur afin que je puisse enregistrer la valeur d'un SpinBox. Cependant, je ne peux pas comprendre comment définir dynamiquement la propriété nom de l'alias.

Ce que je veux réaliser est d'avoir la propriété nom de l'alias pour être le même que le modelData. Par exemple, pour l'item 1: "la propriété alias item1: boîte.valeur"; pour item2: "la propriété alias item2: boîte.valeur", etc.

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

Le code ci-dessus génère les paramètres suivants, et est un travail autour de ce que je voulais faire:

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

Ce que je veux, c'est une seule et même catégorie avec les valeurs, comme suit:

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

La meilleure réponse

1

Pour ce cas, vous ne pouvez pas utiliser les propriétés, mais la value() et setValue() méthodes:

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

Sortie:

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

Cela fonctionne parfaitement. Seule chose que je pourrais mentionner, c'est que j'ai mis le onValueChanged propriété de la case pour enregistrer les paramètres de répliquer les alias de comportement.
Vlad

@Vlad Oui, je sais, j'allais ajouter, mais IMO il est inutile de les enregistrer à tout moment, je préfère que la charge est au début et à enregistrer à la fin.
eyllanesc

Dans d'autres langues

Cette page est dans d'autres langues

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