Для реализации перетаскивания требуется выполнение операции перетаскивания и удаления во всех виджетах, которые будут поддерживать его.
Для реализации операции перетаскивания лучшего подход заключается в использовании перегружать обработчик событий мыши в виджете, который должен иметь возможность перетаскивать:
void DragWidget::mousePressEvent(QMouseEvent *event)
{
if (event->button() == Qt::LeftButton)
dragStartPosition = event->pos();
}
void DragWidget::mouseMoveEvent(QMouseEvent *event)
{
if (!(event->buttons() & Qt::LeftButton))
return;
if ((event->pos() - dragStartPosition).manhattanLength()
< QApplication::startDragDistance())
return;
QDrag *drag = new QDrag(this);
QMimeData *mimeData = new QMimeData;
mimeData->setData(mimeType, data);
drag->setMimeData(mimeData);
Qt::DropAction dropAction = drag->exec(Qt::CopyAction | Qt::MoveAction);
...
}
Чтобы иметь возможность получать событие отпускания, это необходимо, чтобы отметить виджет с setAcceptDrops (true) и перегружать функции dragEnterEvent() и dropEvent(). Например:
Window::Window(QWidget *parent)
: QWidget(parent)
{
...
setAcceptDrops(true);
}
void Window::dropEvent(QDropEvent *event)
{
textBrowser->setPlainText(event->mimeData()->text());
mimeTypeCombo->clear();
mimeTypeCombo->addItems(event->mimeData()->formats());
event->acceptProposedAction();
}
Вы можете найти полную документацию для этой here.
Проверьте здесь - http://qt-project.org/doc/qt-5/dnd.html –