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