QTは2つのQListWidgetの間でドラッグアンドドロップします
-
15-10-2019 - |
質問
私は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
もう落とすことはできません。
それを行うには、独自のドラッグアンドドロップ機能を書く必要がありますか?
解決
拡張できます 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 使用できます 宣伝する... 右クリックするときのコンテキストメニューからオプション QListWidget
あなたのフォームに。新しいクラスの名前を入力する必要があります(MyListWidget
私の例では)と、クラスが宣言される新しいヘッダーファイルの名前を入力する必要があります(上のコードをコピーしてこのファイルに貼り付けることができます)。
所属していません StackOverflow