将项目从列表小部件拖放到列表小部件后,该项目在目标列表小部件中消失。
我仅将EventFilter用于MainWindow中的列表小部件。
bool MainWindow::eventFilter(QObject *target,QEvent *event){
if (event->type() == QEvent::DragEnter)
{
QDragEnterEvent *tDragEnterEvent = static_cast<QDragEnterEvent *>(event);
tDragEnterEvent->acceptProposedAction();
return true;
}
else if (event->type() == QEvent::DragMove)
{
QDragMoveEvent *tDragMoveEvent = static_cast<QDragMoveEvent *>(event);
tDragMoveEvent->acceptProposedAction();
return true;
}
else if (event->type() == QEvent::Drop)
{
QDropEvent *tDropEvent = static_cast<QDropEvent *>(event);
tDropEvent->acceptProposedAction();
qDebug() << "OK, execute your task!";
return true;
}
else
{
// standard event processing
return QObject::eventFilter(target, event);
}
//return false;
}
//in MainWindow constructor
ui->listWidget->installEventFilter(this);
qDebug显示了调试行,但该项目丢失了。
答案 0 :(得分:0)
很高兴看到更多代码以了解您的问题。但是,如果您的目标与拖放支持相关,则可能根本不需要事件过滤器逻辑。通过Qt Creator,您可以为两个QListWidget实例设置以下属性:
请参见下图:
设置这些属性的另一种方法是通过代码:
// Assuming listWidget points to instance of the QListWidget
listWidget->setDragEnabled(true);
listWidget->setDragDropMode(QAbstractItemView::DragDrop);
listWidget->setDefaultDropAction(Qt::MoveAction);