Я просто хотел бы перехватить событие mouseRelease, когда пользователь перетаскивает элемент из QTableView и отпускает левую кнопку.
Я хочу выделить возможные зоны удаления в моем приложении, например, изменить фон виджета.
Я начинаю с определения перетаскивания путем повторной реализации:
void LibraryTableView::startDrag( Qt::DropActions supportedActions )
{
m_dragReleased = false;
emit dragStart();
QTableView::startDrag(supportedActions);
}
и испускаю собственный сигнал.
Теперь, когда дропзона изменилась, мне нужно отловить событие освобождения, чтобы перерисовать дропзону, как и раньше независимо от того, было ли перетаскивание выполнено успешно или нет!
Я пробовал разные модели, переопределяя 4 события мыши и eventFilter, но событие освобождения мыши никогда не перехватывалось.
Вот мой код:
void LibraryTableView::mouseDoubleClickEvent( QMouseEvent* event )
{
QTableView::mouseDoubleClickEvent(event);
}
void LibraryTableView::mouseMoveEvent( QMouseEvent* event )
{
qDebug() << "move";
QTableView::mouseMoveEvent(event);
}
void LibraryTableView::mousePressEvent( QMouseEvent* event )
{
qDebug() << "press";
QTableView::mousePressEvent(event);
}
void LibraryTableView::mouseReleaseEvent( QMouseEvent* event )
{
qDebug() << "real"; // Never called when drag ends ...
QTableView::mouseReleaseEvent(event);
}
Итак, это ошибка?
Если вы знаете трюк, это мне очень поможет.
Спасибо!
Edit: я не могу переопределить dropEvent для каждого виджета в моем приложении, если пользователь перетаскивает элемент в другое приложение, я все еще хочу перехватить событие release ...