Pregunta

Tengo dos QListWidget (lista1 y lista2)

  • list1 debe ser capaz de recibir artículos de list2
  • list1 debe ser capaz de ser reorganizado con un arrastre interno y gota
  • list2 debe ser capaz de recibir artículos de 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);

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?

¿Fue útil?

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).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top