Название: Drag and Drop кастомный индикатор Отправлено: paul_winex от Февраль 24, 2013, 23:03 http://www.prog.org.ru/topic_22385_15.html (http://www.prog.org.ru/topic_22385_15.html)
В этой теме довольно интересно пообсуждали систему dnd, но к сожалению не нашел я там ответов. А вопрос таков: (В данный момент пишу на PyQt, но надеюсь разница не большая) Задача: простое дерево QTreeWidget, айтемы которого заменены на QWidget. Требуется обычное перемещение внутри дерева и ничего более. Проблема: Сами виджеты в айтемах довольно не малые, и при старте перетаскивания создается их скриншот как обычно, и картинка эта внушительных размеров, не дающая даже посмотреть куда происходит перетаскивание. К тому же пустая. Решение кажется простым - переопределить startDrag и сделать там картинку какую нужно. Это есть, сделал, но пропадает индикатор подсветки перетаскивания. Вот тут я не особо силен. Я расчитал QRect для него в методе dragMoveEvent, но куда его подавать чтобы он отобразился??? Это основной вопрос. Второстепенный - как сделать индикатор не в виде прямоугольника а в виде чего угодно? Полагаю надо переопределить какой-нибудь paintEvent и наверняка не в QTreeWidget. Но всё равно интересно! Пробовал перехватить QDrag в методе dragMoveEvent чтобы заменить ему картинку, но не получилось ничего. Таким образом хотел не переопределять startDrag. Полагаю один из ответов будет - использовать QTreeView и определить там всё что нужно, но мне не нужна такая сложная система на данный момент, требуется решить вопрос быстро и просто. К тому же так и не нашел как в TreeView заменять элементы виджетами. Название: Re: Drag and Drop кастомный индикатор Отправлено: paul_winex от Февраль 26, 2013, 09:48 Кажется кое что получилось. Достаточно было в mimeData поместить дату из перетаскиваемых итемов
Код Тогда индикатор не пропадает. Но тогда не ясно как делать кастомную дату для перетаскивания. Наверное здесь уже не обойтись без TreeView. |