Всем привет!
Не могу понять, в чем проблема.
В дизайнере создал форму, где есть QTreeView и QListView. Поставил нужные галки, чтобы работал стандартный Drag & Drop. Он работает. Но мне нужно контролировать этот процесс самому. Так как не очень хочется наследовать эти стандартные классы, думал, что можно все сделать с помощью переопределения eventFilter() главного окна, где находятся TreeView и ListView. Для этого написал следующее:
bool Database::eventFilter(QObject* target, QEvent* event)
{
if (target == ui->listView)
{
switch (event->type())
{
case QEvent::DragMove:
listViewDragMoveEvent(static_cast<QDragMoveEvent*>(event));
return true;
case QEvent::DragEnter:
listViewDragEnterEvent(static_cast<QDragEnterEvent*>(event));
return true;
case QEvent::Drop:
listViewDropEvent(static_cast<QDropEvent*>(event));
return true;
}
}
if (target == ui->treeView)
{
switch (event->type())
{
case QEvent::DragMove:
treeViewDragMoveEvent(static_cast<QDragMoveEvent*>(event));
return true;
case QEvent::DragEnter:
treeViewDragEnterEvent(static_cast<QDragEnterEvent*>(event));
return true;
case QEvent::Drop:
treeViewDropEvent(static_cast<QDropEvent*>(event));
return true;
}
}
return false;
}
В итоге вышло, что нужные события (QDragEnterEvent, QDragMoveEvent и QDropEvent) просто не происходят с вьюверами, когда я делаю перетаскивание элементов внутри них или перетаскивание новых элементов извне. Почему эти события не происходят?