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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Drag and Drop кастомный индикатор  (Прочитано 1913 раз)
paul_winex
Гость
« : Февраль 24, 2013, 23:03 »

http://www.prog.org.ru/topic_22385_15.html
В этой теме довольно интересно пообсуждали систему dnd, но к сожалению не нашел я там ответов. А вопрос таков:
(В данный момент пишу на PyQt, но надеюсь разница не большая)
Задача:
    простое дерево QTreeWidget, айтемы которого заменены на QWidget. Требуется обычное перемещение внутри дерева и ничего более.
Проблема:
    Сами виджеты в айтемах довольно не малые, и при старте перетаскивания создается их скриншот как обычно, и картинка эта внушительных размеров, не дающая даже посмотреть куда происходит перетаскивание. К тому же пустая. Решение кажется простым - переопределить startDrag и сделать там картинку какую нужно. Это есть, сделал, но пропадает индикатор подсветки перетаскивания. Вот тут я не особо силен. Я расчитал QRect для него в методе dragMoveEvent, но куда его подавать чтобы он отобразился??? Это основной вопрос. Второстепенный - как сделать индикатор не в виде прямоугольника а в виде чего угодно? Полагаю надо переопределить какой-нибудь paintEvent и наверняка не в QTreeWidget. Но всё равно интересно!

Пробовал перехватить QDrag в методе dragMoveEvent чтобы заменить ему картинку, но не получилось ничего. Таким образом хотел не переопределять startDrag.
Полагаю один из ответов будет - использовать QTreeView и определить там всё что нужно, но мне не нужна такая сложная система на данный момент, требуется решить вопрос быстро и просто. К тому же так и не нашел как в TreeView заменять элементы виджетами.
Записан
paul_winex
Гость
« Ответ #1 : Февраль 26, 2013, 09:48 »

Кажется кое что получилось. Достаточно было в mimeData поместить дату из перетаскиваемых итемов
Код
Python
data = self.mimeData(self.selectedItems())
drag.setMimeData(data)
Тогда индикатор не пропадает. Но тогда не ясно как делать кастомную дату для перетаскивания. Наверное здесь уже не обойтись без TreeView.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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