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