Название: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 13:31 Наследуюсь от QTreeWidget и переопределяю dragMoveEvent, dropEvent. Проблема заключается в том, что механизм перестановки двух элементов в dropEvent не работает. Если точнее, то элемент по takeTopLevelItem удаляется, но не вставляется по insertTopLevelItem. Что не так делаю?
Вот код: Код: #include <QtCore/QDebug> Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 13:42 в начале dropEvent() нужно вставить:
if( _dragMoveItemBelow == currentItem() ) return; + если кидаете в конец дерева, то нужно использовать QTreeWidget::addTopLevelItem(). Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 14:03 если кидаете в конец дерева, то нужно использовать QTreeWidget::addTopLevelItem(). С этим понятно.в начале dropEvent() нужно вставить: Данный случай невозможен!if( _dragMoveItemBelow == currentItem() ) return; Вопрос открыт! Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 14:10 Кстати addTopLevelItem тоже не отрабатывает корректно!
Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 14:13 ну тогда:
if( !_dragMoveItemBelow ) return; В общем не поленился собрал пример - всё правильно работает, за исключением если кидать в начало и в конец. Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 14:15 Цитировать Кстати addTopLevelItem тоже не отрабатывает корректно! Правильно, потому что dragMoveItemBelow в этом случае всегда будет 0 )Вообще-то, мог бы и сам догадаться ) Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 14:28 Цитировать Кстати addTopLevelItem тоже не отрабатывает корректно! Правильно, потому что dragMoveItemBelow в этом случае всегда будет 0 )Вообще-то, мог бы и сам догадаться ) Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 14:30 Вот новый dropEvent:
Код: void dropEvent( QDropEvent* ) Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 14:34 Работает.
И не учтён ещё момент перемещения в начало. Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 14:37 Можете свой код с исправленияси запостить? Так как у меня описанный случай не работает!
Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 14:58 Цитировать Можете свой код с исправленияси запостить? Так как у меня описанный случай не работает! А смысл? Я ничего своего не вносил. Всё ваше.Проверил на linux-e Qt 4.5, 4.6.2, 4.7.1 - везде всё ok. Цитировать И не учтён ещё момент перемещения в начало. Упс, погорячился - всё работает.Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 15:08 Под виндой (windows xp, qt 4.6.2, 4.7.0, 4.7.1) не работает! Есть винда?
Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 12, 2010, 15:55 Поблема решена! Спасибо за ответы!
Необходимо заменить setDragDropMode( QTreeWidget::InternalMove ); на setDragDropMode( QTreeWidget::DragDrop ); Видимо при включеном режиме InternalMove запрещается вставлять элементы! Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 15:55 Цитировать Под виндой (windows xp, qt 4.6.2, 4.7.0, 4.7.1) не работает! Есть винда? Мде, WS2003 Qt4.7.1 тоже не работает!Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: GreatSnake от Ноябрь 12, 2010, 16:04 Цитировать Поблема решена! Спасибо за ответы! Ну это же баг. Коли в руководстве не оговаривается про другое повидение на винде, то и работать должно одинаково.Необходимо заменить setDragDropMode( QTreeWidget::InternalMove ); на setDragDropMode( QTreeWidget::DragDrop ); Видимо при включеном режиме InternalMove запрещается вставлять элементы! Так что вперёд на bugreports.qt.nokia.com! (http://bugreports.qt.nokia.com!) Название: Re: Drag&Drop - не работает перестановка двух элементов по dropEvent. Отправлено: alexman от Ноябрь 13, 2010, 23:21 Цитировать Поблема решена! Спасибо за ответы! Ну это же баг. Коли в руководстве не оговаривается про другое повидение на винде, то и работать должно одинаково.Необходимо заменить setDragDropMode( QTreeWidget::InternalMove ); на setDragDropMode( QTreeWidget::DragDrop ); Видимо при включеном режиме InternalMove запрещается вставлять элементы! Так что вперёд на bugreports.qt.nokia.com! (http://bugreports.qt.nokia.com!) |