13

2つのQListWidget(list1とlist2)があります

  • list1からアイテムを受け取ることができるはずですlist2
  • list1内部ドラッグアンドドロップで再編成できる必要があります
  • list2からアイテムを受け取ることができるはずです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);

を装着する必要がありlist2ました。そうしInternalMoveないと、アイテムをにドラッグしてもアイテムが削除されませんlist1

そして、私がそれに置くならば、私はlist1それInternalMove以上それを落とすことができません。

そのためには、独自のドラッグアンドドロップ関数を作成する必要がありますか?

4

1 に答える 1

15

QListWidget以下のようにオーバーライドdragMoveEventメソッドを拡張できます

#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

実装内でドラッグ イベントのソースを確認し、ウィジェット自体からのアイテムのドロップを受け入れません (許可しません)。QtDesigner
を 使用している場合は、フォームを右クリックしてコンテキスト メニューから [次へ... に昇格] オプションを使用できます。新しいクラスの名前を入力する必要があり (私の例では)、クラスが宣言される新しいヘッダー ファイルの名前を入力する必要があります (上記のコードをコピーしてこのファイルに貼り付けることができます)。QListWidgetMyListWidget

于 2011-01-04T21:29:32.540 に答える