2011-01-04 13 views
9

mam dwa QListWidget (list1 i lista2)Qt przeciągnij i upuść pomiędzy dwoma QListWidget

  • list1 powinien być w stanie odbierać przedmioty od list2
  • list1 powinien móc zostać zreorganizowana z wewnętrznym przeciągnij i drop
  • list2 powinien być w stanie odbierać przedmioty od 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); 

Musiałem umieścić list2 na InternalMove w przeciwnym razie element nie zostanie usunięty po przeciągnięciu go do list1.

A jeśli wstawię list1 do InternalMove, nie mogę już na nim upuścić.

Czy muszę napisać własną funkcję przeciągnij i upuść, aby to zrobić?

Odpowiedz

11

można rozszerzyć QListWidget nadrzędny dragMoveEvent sposób jak poniżej

#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 

Wewnątrz naszej implementacji możemy sprawdzić źródło zdarzenia przeciągania i nie przyjmujemy (pozwolić) upuszczenie przedmiotów, które pochodzą z naszego samego widgetu.
Jeśli używasz QtDesigner, możesz użyć opcji Promuj do ... z menu kontekstowego po kliknięciu prawym przyciskiem myszy na formularzu QListWidget. Musisz podać nazwę swojej nowej klasy (MyListWidget w moim przykładzie) i musisz podać nazwę nowego pliku nagłówkowego, w którym zostanie zadeklarowana twoja klasa (możesz skopiować i wkleić powyższy kod do tego pliku).

Powiązane problemy