QT перетаскивание между двумя QlistWidget
-
15-10-2019 - |
Вопрос
У меня два 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
В моем примере), и вы должны ввести имя нового файла заголовка, где будет объявлен ваш класс (вы можете скопировать и вставить код выше в этот файл).