Qt de arrastrar y soltar entre dos QListWidget
-
15-10-2019 - |
Pregunta
Tengo dos QListWidget (lista1 y lista2)
-
list1
debe ser capaz de recibir artículos delist2
-
list1
debe ser capaz de ser reorganizado con un arrastre interno y gota ??li> -
list2
debe ser capaz de recibir artículos delist1
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);
que tenía que poner la list2
en InternalMove
si no el artículo no se retire cuando lo arrastro a la list1
.
Y si pongo list1
a InternalMove
no puedo caer más en él.
¿Tengo que escribir mi propia función de arrastrar y soltar para hacer eso?
Solución
QListWidget
primordial dragMoveEvent
método como el de abajo
#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
Dentro de nuestra aplicación que compruebe el origen del evento de arrastre y no aceptamos (permitir) soltando los elementos que vienen de nuestro widget en sí.
Si está utilizando QtDesigner puede utilizar Promover a ... opción en el menú contextual al hacer clic derecho sobre el QListWidget
en su formulario. Usted tiene que introducir un nombre de su nueva clase (MyListWidget
en mi ejemplo) y hay que introducir un nombre de archivo nuevo de encabezado, donde se declaró su clase (se puede copiar y pegar el código anterior en este archivo).