【问题标题】:Items after dropping from widget to widget missing从小部件拖放到小部件后的项目丢失
【发布时间】:2019-05-11 10:21:56
【问题描述】:

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

我只对 MainWindow 中的列表小部件使用了 eventFilter。

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

【问题讨论】:

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


    【解决方案1】:

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

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

    见下图:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-06-15
      • 1970-01-01
      • 2012-08-30
      • 2017-05-26
      • 1970-01-01
      • 2014-07-20
      • 1970-01-01
      相关资源
      最近更新 更多