2011-01-04 22 views
9

Iき2 QListWidget(LIST1とLIST2)Qtのドラッグ両者のドロップQListWidget

  • list1する内部ドラッグで再編成することができなければならないlist2
  • list1からアイテムを受け取ることができなければならないと
  • list2list1

012からアイテムを受け取ることができるはずドロップ
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); 

list2InternalMoveに置く必要がありました。それ以外の場合は、list1にドラッグするとアイテムが削除されません。

もし私がlist1InternalMoveに入れたら、それ以上は落とせません。

これを行うには、独自のドラッグアンドドロップ機能を作成する必要がありますか?あなたは私たちの実装内部

#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 

以下のようなQListWidgetオーバーライドdragMoveEvent方法を拡張することができ

答えて

11

我々は、ドラッグイベントのソースをチェックして、私たちは私たちのウィジェット自体から来るのアイテムをドロップ(許可)は受け付けておりません。
QtDesignerを使用している場合は、フォーム上のQListWidgetを右クリックすると、コンテキストメニューからプロモート...オプションを使用できます。あなたの新しいクラスの名前(私の例ではMyListWidget)を入力しなければなりません。あなたのクラスが宣言される新しいヘッダーファイルの名前を入力する必要があります(上のコードをコピーしてこのファイルに貼り付けることができます)。

関連する問題