从小部件拖放到小部件后的项目丢失

时间:2019-05-11 10:21:57

标签: c++ qt drag-and-drop qlistwidget

将项目从列表小部件拖放到列表小部件后,该项目在目标列表小部件中消失。

我仅将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显示了调试行,但该项目丢失了。

1 个答案:

答案 0 :(得分:0)

很高兴看到更多代码以了解您的问题。但是,如果您的目标与拖放支持相关,则可能根本不需要事件过滤器逻辑。通过Qt Creator,您可以为两个QListWidget实例设置以下属性:

  1. dragEnabled设置为true。
  2. dragDropMode设置为DragDrop。
  3. 将defaultDropAction设置为MoveAction。

请参见下图:

enter image description here

设置这些属性的另一种方法是通过代码:

// Assuming listWidget points to instance of the QListWidget
listWidget->setDragEnabled(true);
listWidget->setDragDropMode(QAbstractItemView::DragDrop);
listWidget->setDefaultDropAction(Qt::MoveAction);