Название: Drag and Drop картинок Отправлено: phpCoder от Апрель 22, 2015, 17:10 Добрый день.
Есть QScrollArea, в ней виджет, на виджете QGridLayout. В разметке лежат QLabel (в них картинки). Хочу, чтобы можно было мышью дергать мои картинки и перемещать их в другие ячейки разметки (ну как мы дергаем айтемы в QTreeWidget, QListWidget...). Как это сделать? Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 22, 2015, 17:53 Ну а чего не прямолинейно на событиях мыши? (не вижу что мешает, где проблемы)
Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 23, 2015, 08:51 Не могу сообразить как сделать.
Плюс, забыл сказать, перетаскивания разрешены в пределах одной строки. Т.е. нельзя взять лейбел из строки 1 и перенести в строку 2. Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 23, 2015, 09:09 Ну просто перекрываете mousePress, mouseMove и mouseRelease. В mouseMove отслеживаете ячейку под курсором и подсвечиваете ее (флажок ловите в paintEvent). В mouseRelease замещаете. Если перемещение "локально" (в пределах виджета), то связываться с DnD часто смысла нет.
Еще правило хорошего тона - не лезть с драгом немедленно. Напр юзер нажал на ячейку - ничего еще не происходит. Только когда зажатая мышь сместилась на 3-5 пыкселей - появляется имедж драга Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 23, 2015, 19:19 Тоже не ясно - как подсвечивать ячейку, куда хочу перенести картинку? Было бы здорово сделать как в QListView - там появляется горизонтальная черта между соседними элементами (а у меня соответственно должна быть вертикальная).
Может у кого код есть, пусть примерный - чтобы было на что ориентироваться. Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 23, 2015, 23:45 Как вставить виджет между двумя соседними в QGridLayout?
Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 24, 2015, 07:53 Тоже не ясно - как подсвечивать ячейку, куда хочу перенести картинку? Было бы здорово сделать как в QListView - там появляется горизонтальная черта между соседними элементами (а у меня соответственно должна быть вертикальная). Код дать не могу - он размазан в моем большом классе, черту рисовал примерно такМожет у кого код есть, пусть примерный - чтобы было на что ориентироваться. Код
Как вставить виджет между двумя соседними в QGridLayout? Я извлкекал все (takeAt) в контейнер, добавлял новый и перезаполнял лайаут Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 24, 2015, 08:50 Ясно, спасибо.
Про лейаут - думал о том же - больше похоже на костыль. Хм, может комбинировать гор. и верт. лейауты... Там вроде есть функция типа insert. Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 24, 2015, 09:37 Про лейаут - думал о том же - больше похоже на костыль. Нет смысла - строки "поедут". Желание "попастись" вполне понятно (тяжелое пых-пых детство :)), но надо и меру знать, а то десяток "своих" строк кода - уже и "костыль" :)Хм, может комбинировать гор. и верт. лейауты... Там вроде есть функция типа insert. Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 24, 2015, 23:05 Да, не, детство было на с++.)
Не знаете, как можно подсветить целевую ячейку (виджет в ячейке) когда на ней/ним мышка с драгом? Сейчас у меня получается сделать рамку, а вот полупрозрачную заливку - нет. Она оказывается под целевой ячейкой с виджетом. А нужно над ним. Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 25, 2015, 06:28 Не знаете, как можно подсветить целевую ячейку (виджет в ячейке) когда на ней/ним мышка с драгом? Сейчас у меня получается сделать рамку, а вот полупрозрачную заливку - нет. Она оказывается под целевой ячейкой с виджетом. А нужно над ним. Покрутите QPainter::setCompositionMode. Не получится - покажите скриншот(ы) чего хотите добитьсяНазвание: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 25, 2015, 14:57 Скриншот во вложении.
Картинка (папка) находится под подсветкой. Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 25, 2015, 17:12 Поверх светло-зеленым с альфой напр 50%
Код
Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 26, 2015, 22:05 Это было бы слишком просто. Не работает. Qlabel с картинкой все равно сверху.
Код
Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 27, 2015, 08:30 Это было бы слишком просто. Не работает. Qlabel с картинкой все равно сверху. Так сначала надо отрисовать саму картинку, тогда она и окажется под подсветкой. Опять не получится - выкладывайте проект, будет быстрееКод
Edit: ага, кажется понял. Вы рисуете не из самого виджета а из другого. Так тоже можно, но тогда назначьте Qt::WA_TranslucentBackground для него (ThumbnailContainer) Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 27, 2015, 23:19 Да, именно так.
Поставил этот атрибут - при изменении размеров окна фон виджета контейнера стал черным. Название: Re: Drag and Drop картинок Отправлено: phpCoder от Апрель 27, 2015, 23:21 Т.е. нужно, чтобы пейнтер из контейнера рисовал не только на самом контейнере, но и поверх дочерних элементов (картинок).
Название: Re: Drag and Drop картинок Отправлено: Igors от Апрель 28, 2015, 06:50 Выкладывайте тестовый проект - а то полемика слишком затянулась :)
|