Temsilci içindeki dinamik özellik adı atamaları

0

Soru

Bir SpinBox değerini kaydedebilmem için bir Tekrarlayıcı temsilcisinin içine bir Ayarlar nesnesi eklemeye çalışıyorum. Ancak, özellik takma adının dinamik olarak nasıl ayarlanacağını anlayamıyorum.

Elde etmek istediğim, özellik takma adının modelData ile aynı olması. Örneğin, ıtem1 için: "özellik diğer adı ıtem1: kutusu.değer"; ıtem2 için: "özellik diğer adı ıtem2: kutusu.değer", vb.

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

Yukarıdaki kod aşağıdaki ayarları oluşturur ve ne yapmak istediğime geçici bir çözümdür:

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

İstediğim, aşağıdaki gibi değerlere sahip tek bir kategoridir:

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

En iyi cevabı

1

Bu durumda, özellikleri kullanamazsınız, ancakvalue() vesetValue() yöntemler:

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

Çıktı:

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

Bu mükemmel çalışıyor. Bahsedebileceğim tek şey, diğer ad davranışını çoğaltmak için kutunun onValueChanged özelliğini ayarlara kaydedecek şekilde ayarlamamdır.
Vlad

@Vlad Evet, biliyorum, ekleyecektim ama IMO onları her zaman kaydetmeye gerek yok, yükün başında olmasını ve sonunda kaydetmesini tercih ediyorum.
eyllanesc

Diğer dillerde

Bu sayfa diğer dillerde

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