Может ли Qml получить список моделей и позволить списку просмотра выбрать, какую из них использовать? - PullRequest
0 голосов
/ 23 мая 2019

У меня есть один просмотр списка в qml, теперь известный как listview1. Для каждого элемента в listview1 он содержит другое представление списка, используемое для отображения некоторых его переменных. Теперь я хочу, чтобы все такие подсписки могли добавлять элементы к ним. А также добавление элемента в один из них не повлияет на все остальные представления списка в других элементах listview1.

Как лучше всего решить эту проблему? Спасибо

1 Ответ

0 голосов
/ 25 мая 2019

Адаптировано с https://stackoverflow.com/a/55604525/1493608 (то же самое, но с GridView вместо ListView):

  • Присвойте каждому суб-ListView UUID.
  • Подключите каждый суб-ListView к сигналу listview1, который вы будете использовать для трансляции суб-ListView делегатам того, что вы хотите сделать.
  • В этом сигнале укажите свой UUID.
  • В суб-ListView приемниках установите фильтр на UUID и делайте то, что хотите, только если он правильный.
ListView {
    id: listview1

    signal broadcaster(string uuid, var other_args)

    delegate: ListView {
        // Provided like this or as a role from the corresponding list element
        property string uuid: ""

        signal sendToOtherLV(string uuid, var other_args)

        function lv_receiver(broadcasted_uuid, other_args) {
            if (this.uuid === broadcasted_uuid) {
                // Do what you have to do with other_args.
            }
        }

        Component.onCompleted: {
            /*
             * Custom way to generate the UUID and store it so
             * the other ListViews will be able to retrieve it.
             */
            this.uuid = generateAndStoreUUID()

            // Connecting the sub-ListView to your "sub-ListView LAN".
            this.sendToOtherLV.connect(listview1.broadcaster)
            listview1.broadcaster.connect(this.lv_receiver)
        }

        Component.onDestruction: {
            // Disconnecting the sub-ListView from your "sub-ListView LAN".
            this.sendToOtherLV.disconnect(listview1.broadcaster)
            listview1.broadcaster.disconnect(this.lv_receiver)
        }

        // Here is an example of what you might have to do
        function foo() {
            // ...

            var otherlv_receiver_uuid
            var signal_args

            // Retreive the UUID of the ListView that you want to send something to.
            // Set the other arguments you want to send through the signal.

            this.sendToOtherLV(otherlv_receiver_uuid, signal_args)

            // ...
        }

        // Other sub-ListView-related stuff
    }

    // Other listview1-related stuff
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...