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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Нестандартный drag and drop  (Прочитано 2560 раз)
sergs
Гость
« : Январь 22, 2016, 13:53 »

Есть модель, основаная на QAbstractItemModel. В ней помимо прочего переопределены методы mimeData(), mimeTypes(), dropMimeData() и supportedDropActions(). Причем supportedDropActions() возвращает только Qt::MoveAction. Также есть класс представления, основанный на QTreeView в котором отображаются данные модели.

Сейчас при помощи drag and drop можно выполнять перетаскивание элементов внутри view (менять их порядок, перегруппировывать). Но при перетаскивании элемента в другой view выполняется перемещение. Необходимо реализовать следующее поведение: при перетаскиевании в пределах одного view всегда выполняется перемещение (Qt::MoveAction), а при перетаскивании за пределы view должна быть возможность выполнить либо клопирование, либо перемещение.

Попытался реализовать это путём добавления Qt::CopyAction в список разрешенных
Код:
 Qt::DropActions MyTreeModel::supportedDropActions() const
 {
  return Qt::CopyAction | Qt::MoveAction;
 }
и переопределением метод dropEvent() у класса представления
Код:
void MyTreeView::dropEvent(QDropEvent *event)
{
  if ( event->source() == this && event->proposedAction() == Qt::CopyAction)
  {
     event->setDropAction(Qt::MoveAction);
  }
  event->accept();
  QTreeView::dropEvent(event);
}
Но ничего не получилось. При перетаскивании даже в пределах одного view элемент просто удаляется. Подскажите в чем моя ошибка и как можно реализовать желаемое поведение?
Записан
YvenTitan
Самовар
**
Offline Offline

Сообщений: 174


Просмотр профиля
« Ответ #1 : Январь 22, 2016, 14:25 »

Можете скинуть переопределенную DropMimeData и строки, где устанавливаете параметры QTreeView для drag and drop
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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