Russian Qt Forum
Ноябрь 22, 2024, 16:49 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с делегатом.  (Прочитано 4976 раз)
Вячеслав
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« : Июль 02, 2016, 11:24 »

Доброе время суток!
Начал тока изучать QT и QML и возникли вопросы которые к сожалению не нашел в интернете.

есть проект на QML в нет GridView (не на весь экран) которые отображает картинки.
мне надо при нажатии на картинку с эмитировать ее перемещение в правый крайний угол экрана при этом сама картинки из GridView никуда не девается.

попытался сделать это внутри делегата - понял что это у меня не получается в связи с не понятными параметрами координат внутри делегата.

сделал отдельный image - который должен наложится на отображение выбранной картинки и уже этот image перемещать.
но не пойму как определить расположение нужного делегата по отношении к экрану.

Заранее спасибо.

Может посоветуете другой вариант решения..
« Последнее редактирование: Июль 02, 2016, 11:31 от Вячеслав » Записан
Отражение луны
Гость
« Ответ #1 : Июль 02, 2016, 17:55 »

Координаты внутри элемента считаются всегда относительно координат его родителя. То есть левых верхний угол - это 0,0, а нижний правый - width, height. Кроме того, это будет попросту выходом за пределы делегата. Т.е. это заведомо неправильное с точки зрения дизайна QML решение.
Как же поступить? На самом деле довольно просто. На клик:
1. Создаем свой экземпляр делегата, содержащего изображение, parent должен быть верхний элемент, содержащий всю форму, или же её часть так, чтобы анимация не выходила за границы этого элемента.  Для создания есть Component.createObject, то есть в твоем случае это будет что-то вроде myGridItemDelegate.createObject.
2. Устанавливаем ему координаты кликнутого делегата. Для того, чтобы получить правильные координаты относительно другого parentа используется mapToItem.
3. Устанавливаем все параметры делегата так, чтобы они соотвествовали параметрам кликнутого делегата. Ну то есть задаем картинку и прочие параметры. На этом этапе у нас получается 2 идентичных объекта, один лежит в gridе, второй над ним и принадлежит другому родителю.
4. Делаем видимым и анимируем. Для анимации используем SequentialAnimation. Чтобы одна анимация не перекрывала другую - анимации тоже придется создавать динамически, через createObject.  Первым делом запускаем любые нужные нам анимации, а затем пихаем туда ScriptAction, в котором вызываем destroy данного объекта и самой анимации. Готово.

На первый взгляд выглядит сложно, но на практике - раз плюнуть.
« Последнее редактирование: Июль 02, 2016, 17:59 от Komorebi » Записан
Вячеслав
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #2 : Июль 02, 2016, 18:24 »

походу вот это я и искал "mapToItem".

Большое спасибо.
Записан
Вячеслав
Новичок

Offline Offline

Сообщений: 10


Просмотр профиля
« Ответ #3 : Июль 03, 2016, 01:14 »

Все супер.
Все получилось.

СПАСИБО.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.13 секунд. Запросов: 23.