Перемещение элементов между несколькими ListModel |
Здравствуйте, гость ( Вход | Регистрация )
Перемещение элементов между несколькими ListModel |
eternal_ego |
18.7.2014, 9:08
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.3.2012 Пользователь №: 3266 Спасибо сказали: 0 раз(а) Репутация: 0 |
Доброго времени суток!
Имеется некий интерфейс на QML. Всю работу с ним хочется реализовать так, чтобы не трогать C++ код, то есть обойтись QML со скриптами. Интерфейс представляет собой несколько вкладок TabView, в каждой из которых - ScrollView, содержащий ListView. Задача: осуществить "перекидывание" компонентов из одного ListView в другой так, чтобы они не пересоздавались. По сути, просто вынуть из одной модели и воткнуть в другую. Но вот незадача, в ListModel нельзя воткнуть уже готовое. А без ListModel компоненты во вьюшке складываются плохо. Вопрос: как это обойти? |
|
|
Trisch |
18.7.2014, 11:46
Сообщение
#2
|
Активный участник Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: 0 |
Возможно, тебе вот это поможет http://qt-project.org/doc/qt-5/qml-qtquick-drag.html
|
|
|
eternal_ego |
18.7.2014, 11:53
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.3.2012 Пользователь №: 3266 Спасибо сказали: 0 раз(а) Репутация: 0 |
Боюсь, это не совсем то. Перетягивать компоненты я могу только в другие визуальные компоненты, но никак не в ListModel.
|
|
|
Trisch |
18.7.2014, 19:24
Сообщение
#4
|
Активный участник Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: 0 |
Тогда, не совсем понятен вопрос
Тебе надо уже в готовую модель добавить новый компонент? |
|
|
eternal_ego |
18.7.2014, 19:34
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.3.2012 Пользователь №: 3266 Спасибо сказали: 0 раз(а) Репутация: 0 |
Не совсем. Брать готовый компонент из существующей модели А и перемещать его в существующую модель Б. Если делать ручками в обход, это будет выглядеть как запоминание всех параметров А, удаление А, создание Б, применение запомненных параметров к Б. Долго, муторно, глупо. Вот парента у компонента поменять можно, но в данном случае это не то.
|
|
|
Trisch |
19.7.2014, 1:57
Сообщение
#6
|
Активный участник Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: 0 |
Так у модели есть функции добавдения элементов ListModel::append и удаления ListModel::remove ( int index ). В итоге пользуешься моделью как списком.
|
|
|
eternal_ego |
19.7.2014, 5:04
Сообщение
#7
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.3.2012 Пользователь №: 3266 Спасибо сказали: 0 раз(а) Репутация: 0 |
Вот я об этом и писал выше. Эти методы не позволяют взять уже созданный компонент, они создают уже нового делегата. Никаких проблем, если делегат простой: применил при создании пару параметров, и вуаля. Но если в делегате несколько десятков элементов с зависимостями? Тут это уже не удобно.
|
|
|
eternal_ego |
23.7.2014, 8:37
Сообщение
#8
|
Новичок Группа: Новичок Сообщений: 6 Регистрация: 15.3.2012 Пользователь №: 3266 Спасибо сказали: 0 раз(а) Репутация: 0 |
Ан нет, был категорически не прав. Оказывается, при использовании append и insert можно передавать не только "параметры" делегата (в фигурных скобках), но и объект целиком, который может быть получен функцией get от ListModel. Правда, при этом нужно быть аккуратным с существующими соединениями по сигналам, возможно часть их надо рассоединять и создавать новые соединения (в зависимости от конкретного используемого компонента).
|
|
|
Текстовая версия | Сейчас: 22.11.2024, 7:38 |