Элементы после перехода из виджета в виджет отсутствуют - PullRequest
0 голосов
/ 11 мая 2019

После перетаскивания элемента из виджета списка в виджет списка элемент исчезает в виджете списка целей.

Я использовал 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 голосов
/ 14 мая 2019

Было бы неплохо увидеть больше кода, чтобы понять вашу проблему.Однако, если ваша цель связана с поддержкой перетаскивания, возможно, вам вообще не нужна логика фильтра событий.С помощью 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);
...