Question

J'ai deux QListWidget (list1 et list2)

  • list1 devrait être en mesure de recevoir des articles de list2
  • list1 devrait pouvoir être réorganisé avec un glisser-déposer interne
  • list2 devrait être en mesure de recevoir des articles 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);

Je devais mettre le list2 sur InternalMove sinon l'article est supprime pas quand je le faire glisser vers le list1.

Et si je mets à list1 InternalMove je ne peux pas laisser tomber plus sur elle.

Dois-je écrire mon propre fonction glisser-déposer pour le faire?

Était-ce utile?

La solution

Vous pouvez étendre QListWidget primordiale dragMoveEvent procédé comme ci-dessous

#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

Dans notre implémentation nous vérifions la source de l'événement glisser nous n'acceptons pas (autoriser) à déposer les éléments qui viennent de notre widget de lui-même.
Si vous utilisez QtDesigner vous pouvez utiliser Promouvoir à ... dans le menu contextuel lorsque vous cliquez droit sur le QListWidget sur votre formulaire. Vous devez entrer un nom de votre nouvelle classe (MyListWidget dans mon exemple) et vous devez entrer un nom de fichier d'en-tête, où votre classe sera déclarée (vous pouvez copier et coller le code ci-dessus dans ce fichier).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top