Frage

Ich habe zwei QListWidget (List1 und List2)

  • list1 sollte in der Lage sein, Artikel von zu empfangen list2
  • list1 sollte in der Lage sein, mit einem internen Luftwiderstand neu organisiert zu werden
  • list2 sollte in der Lage sein, Artikel von zu empfangen 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);

Ich musste das setzen list2 an InternalMove Andernfalls wird der Gegenstand nicht entfernt, wenn ich es in die ziehe list1.

Und wenn ich setze list1 zu InternalMove Ich kann nicht mehr darauf fallen.

Muss ich meine eigene Drag & Drop -Funktion schreiben, um das zu tun?

War es hilfreich?

Lösung

Sie können sich ausdehnen QListWidget überschreiben dragMoveEvent Methode wie unten

#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

In unserer Implementierung überprüfen wir die Quelle des Drag -Ereignisses und akzeptieren (erlauben) Elemente, die von unserem Widget selbst stammen, nicht.
Wenn Sie verwenden QtDesigner Sie können verwenden Befördert zu... Option im Kontextmenü, wenn Sie mit der rechten Maustaste auf die Klicken auf die QListWidget auf deinem Formular. Sie müssen einen Namen Ihrer neuen Klasse eingeben (MyListWidget In meinem Beispiel) und Sie müssen einen Namen der neuen Header -Datei eingeben, in der Ihre Klasse deklariert wird (Sie können den obigen Code in diese Datei kopieren und einfügen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top