Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Перемещение элементов между несколькими ListModel
Форум на CrossPlatform.RU > Библиотеки > Qt > Qt Quick
eternal_ego
Доброго времени суток!

Имеется некий интерфейс на QML. Всю работу с ним хочется реализовать так, чтобы не трогать C++ код, то есть обойтись QML со скриптами.

Интерфейс представляет собой несколько вкладок TabView, в каждой из которых - ScrollView, содержащий ListView.

Задача: осуществить "перекидывание" компонентов из одного ListView в другой так, чтобы они не пересоздавались. По сути, просто вынуть из одной модели и воткнуть в другую. Но вот незадача, в ListModel нельзя воткнуть уже готовое. А без ListModel компоненты во вьюшке складываются плохо.

Вопрос: как это обойти?
Trisch
Возможно, тебе вот это поможет http://qt-project.org/doc/qt-5/qml-qtquick-drag.html
eternal_ego
Боюсь, это не совсем то. Перетягивать компоненты я могу только в другие визуальные компоненты, но никак не в ListModel.
Trisch
Тогда, не совсем понятен вопрос :(
Тебе надо уже в готовую модель добавить новый компонент?
eternal_ego
Не совсем. Брать готовый компонент из существующей модели А и перемещать его в существующую модель Б. Если делать ручками в обход, это будет выглядеть как запоминание всех параметров А, удаление А, создание Б, применение запомненных параметров к Б. Долго, муторно, глупо. Вот парента у компонента поменять можно, но в данном случае это не то.
Trisch
Так у модели есть функции добавдения элементов ListModel::append и удаления ListModel::remove ( int index ). В итоге пользуешься моделью как списком.
eternal_ego
Вот я об этом и писал выше. Эти методы не позволяют взять уже созданный компонент, они создают уже нового делегата. Никаких проблем, если делегат простой: применил при создании пару параметров, и вуаля. Но если в делегате несколько десятков элементов с зависимостями? Тут это уже не удобно.
eternal_ego
Ан нет, был категорически не прав. Оказывается, при использовании append и insert можно передавать не только "параметры" делегата (в фигурных скобках), но и объект целиком, который может быть получен функцией get от ListModel. Правда, при этом нужно быть аккуратным с существующими соединениями по сигналам, возможно часть их надо рассоединять и создавать новые соединения (в зависимости от конкретного используемого компонента).
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Форум IP.Board © 2001-2024 IPS, Inc.