Пытаюсь сейчас разобраться с технологией 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
Предполагается перетаскивание записи (верхняя правая область) на ветку дерева (левая область).