crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

 
Ответить в данную темуНачать новую тему
xintrea
  опции профиля:
сообщение 17.1.2014, 23:05
Сообщение #1


Студент
*

Группа: Новичок
Сообщений: 15
Регистрация: 20.5.2008
Пользователь №: 179

Спасибо сказали: 1 раз(а)




Репутация:   0  


Пытаюсь сейчас разобраться с технологией Drag and Drop в Qt.

Проблема в том, что в принимающем виджете (унаследованном от QTreeView) событие dragEnterEvent() вызывается нормально, а событие dropEvent() - не вызывается.

Я разрешил виджету принимать Drop-события:

KnowTreeView::KnowTreeView(QWidget *parent) : QTreeView(parent)
{
 // Разрешение принимать Drop-события
 setAcceptDrops(true);
 setDropIndicatorShown(true);
}


Однако курсор при перетаскивании на этот виджет все равно в виде запрещающего знака.

Реализация dragEnterEvent(), который срабатывает:

void KnowTreeView::dragEnterEvent(QDragEnterEvent *event)
{
 qDebug() << "dragEnterEvent() - Start";

 // Проверяется, содержит ли объект переноса данные нужного формата
 const QMimeData *mimeData=event->mimeData();
 if(mimeData==NULL)
  {
   qDebug() << "dragEnterEvent() - mime data is NULL";
   return;
  }
 if( ! (mimeData->hasFormat("mytetra/records")) )
  {
   qDebug() << "dragEnterEvent() - format not have mytetra records";
   return;
  }


 QObject *sourceObject=qobject_cast<QObject *>( event->source() );

 if( sourceObject->objectName()=="recordview" )
  {
   event->setDropAction(Qt::MoveAction);
   event->accept();
   // event->acceptProposedAction();

   qDebug() << "Accept in dragEnterEvent()";
  }
}


Реализация dropEvent() - считайте что просто один дебаговый вывод в консоль. И этого вывода нет.

В чем может быть причина?


Полная реализация программы:

https://github.com/xintrea/mytetra_dev - ветка experimental

Проблемный файл с виджетом - приемником: ./src/views/tree/KnowTreeView.cpp

Файл с виджетом - источником: /src/views/recordTable/RecordListScreen.cpp

Предполагается перетаскивание записи (верхняя правая область) на ветку дерева (левая область).
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 18.1.2014, 2:01
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


перекрытие может вызывать дочерний виджет.
У представлений есть дочерний виджет - viewport он иногда кровь пьёт.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


RSS Рейтинг@Mail.ru Текстовая версия Сейчас: 13.5.2025, 14:07