リストウィジェットとツリーウィジェットがあります。listwidgetitems をドラッグ アンド ドロップで listwidget 内に移動できるようにしたいのですが、listwidget が treewidget からドラッグされた項目からのドロップを受け入れるようにしたいのですが、その前に、データに何らかの処理を行いたいと考えています。
今すぐこれらすべてを行うことができますが、ツリーウィジェットから始まるドラッグ イベントにカスタム データを設定する方法を見つけることができません。
たとえば、treewidget に「Add DrawEffect」というテキストと QIcon を含む topLevelItem があり、listwidget 内にドラッグ アンド ドロップすると、次のように listwidget に新しい項目を追加したいと考えています。
DrawEffect 0x0x0x0 effect-here
そしてそうではない
Add DrawEffect (showing its QIcon as well)
このデータはいつ設定する必要がありますか?
これは、listwidget 内で listwidgetitems をドラッグ アンド ドロップするときに完全に正常に動作する、これまでのところ私のコードです。また、listwidget 内で qtreewidgetitems をドラッグ アンド ドロップするときにも機能しますが、追加する前にさらに処理を行いたい場合は、それらをそのままコピーします。
私のツリーウィジェットのコンストラクターで:
this->setDragDropMode(QAbstractItemView::DragOnly);
this->setDefaultDropAction(Qt::CopyAction);
リストウィジェットのコンストラクターで:
this->setAcceptDrops(true);
this->setDragDropMode(QAbstractItemView::DragDrop);
this->setDefaultDropAction(Qt::MoveAction);
listwidget の dropEvent の再実装:
if(event->source()->inherits("QTreeWidget"))
qDebug() << "The dragged item comes from the TreeWidget.";
else
qDebug() << "The dragged item comes from the ListWidget itself.";
QListWidget::dropEvent(event);
ご覧のとおり、treewidget アイテムと listwidget アイテムを区別できますが、この後どうすればよいかわかりません...
私はこのようなものがOKだと思います:
if(event->source()->inherits("QTreeWidget")){
//treewidget item, it needs further processing
}
else
QListWidget::dropEvent(event); //listwidget item, no further processing needed
ありがとう :/