Динамически добавлять дополнительные поля со списком без сброса данных о выходе - PullRequest
1 голос
/ 06 августа 2020

Я хочу динамически добавить больше Combobox в свое представление. Код работает нормально и добавляет новое поле со списком при нажатии кнопки.

Однако, когда я добавляю новый список со списком, данные в существующих списках со списком сбрасываются до значений по умолчанию. Как мне просто добавить еще одно поле со списком без сброса ранее выбранных значений. Я предпочитаю не сохранять существующие значения в какой-то переменной

Вот мой код

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.3

Page {

    id : somepageid
    property int modelList: 0
    property int counter: 0

    // Combobox Listmodel
    ListModel{
        id: listmodel

        ListElement{
            elem: "A"
        }
        ListElement{
            elem: "B"
        }
        ListElement{
            elem: "C"
        }
    }

    // Add more item to Listview
    function addMore(){
        if(counter < listmodel.count){
            counter++
            modelList++
            listid.model = modelList
        }
    }

    // Button
    Button{
        id: testButton
        text: "Click to add Combobox"
        onClicked: {
            addMore()
        }
    }

    // Listview
    ListView{
        id: listid
        model: modelList
        anchors.top:  testButton.bottom
        height: listid.model * 40

        delegate: Row{
            ComboBox{
                id: combo
                textRole: "elem"
                model:listmodel
            }
        }
    }
}

1 Ответ

2 голосов
/ 07 августа 2020

Проблема в том, что вы сбрасываете ListView каждый раз, когда выполняете listid.model = modelList. У вас должна быть фиксированная модель для вашего списка и вносить в нее изменения.

Пример (примененный к вашему коду) может выглядеть так:

import QtQuick 2.15
import QtQuick.Controls 2.15
import QtQuick.Layouts 1.3

Page {

    id : somepageid
    property int counter: 0

    // ListView model
    ListModel{
        id: listmodel
    }

    // Add more item to Listview
    function addMore(){
        if(counter < 3){
            counter++
            listmodel.append({elements: [{elem: "A"}, {elem: "B"}, {elem: "C"}]})
        }
    }

    // Button
    Button{
        id: testButton
        text: "Click to add Combobox"
        onClicked: {
            addMore()
        }
    }

    // Listview
    ListView{
        id: listid
        model: listmodel
        anchors.top:  testButton.bottom
        height: listid.model.count * 40

        delegate: Row{
            ComboBox{
                id: combo
                textRole: "elem"
                model: elements
            }
        }
    }
}
...