Вопрос

У меня два Qlistwidget (List1 и List2)

  • list1 должен иметь возможность получать товары от list2
  • list1 должен быть в состоянии реорганизовать с помощью внутреннего сопротивления
  • list2 должен иметь возможность получать товары от list1

list1->setSelectionMode(QAbstractItemView::SingleSelection);
list1->setDragEnabled(true);
list1->setDragDropMode(QAbstractItemView::DragDrop);
list1->viewport()->setAcceptDrops(true);
list1->setDropIndicatorShown(true);

ulist2->setSelectionMode(QAbstractItemView::SingleSelection);
list2->setDragEnabled(true);
list2->setDragDropMode(QAbstractItemView::InternalMove);
list2->viewport()->setAcceptDrops(true);
list2->setDropIndicatorShown(true);

Я должен был положить list2 на InternalMove В противном случае предмет не удаляется, когда я перетаскиваю его в list1.

И если я положу list1 к InternalMove Я больше не могу бросить на это.

Должен ли я написать свою собственную функцию перетаскивания, чтобы сделать это?

Это было полезно?

Решение

Вы можете расширить QListWidget Переходящий dragMoveEvent метод, как ниже

#ifndef MYLISTWIDGET_HPP
#define MYLISTWIDGET_HPP

#include <QListWidget>

class MyListWidget : public QListWidget {

public:
    MyListWidget(QWidget * parent) :
        QListWidget(parent) {}

protected:
    void dragMoveEvent(QDragMoveEvent *e) {
        if (e->source() != this) {
            e->accept();
        } else {
            e->ignore();
        }
    }
};

#endif // MYLISTWIDGET_HPP

В нашем реализации мы проверяем источник события перетаскивания и не принимаем (разрешать) сбрасывая элементы, которые поступают из нашего самого виджета.
Если вы используете Qtdesigner вы можете использовать Продвигать ... опция из контекста меню, когда вы щелкнете правой кнопкой мыши на QListWidget в вашей форме. Вы должны ввести имя своего нового класса (MyListWidget В моем примере), и вы должны ввести имя нового файла заголовка, где будет объявлен ваш класс (вы можете скопировать и вставить код выше в этот файл).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top