私はいくつかの時間前にはほぼ同じことをした、と私は3つの事を考えることができます:あなたはdropEvent()
を再実装する必要があり、そして多分あなたのdragMoveEvent()
ます
ここには、私がしていたことの非常に小さな例があります。
dragMoveEvent()
では、私はドロップ指標を示していました。この方法では、オブジェクトをドラッグしているときに常にドロップインジケータが表示されます。 dropEvent()
で
void MyTreeView::dragMoveEvent(QDragMoveEvent* event)
{
setDropIndicatorShown(true);
QTreeView::dragMoveEvent(event);
}
、私はそれぞれのケースを管理していた、それは私がドラッグされたアイテムは、その下またはビューポート上で、その上、他の項目にあったならば言うことです。そして、それに応じて、私は自分のドロップを管理していて、イベントの最後に、ドロップインジケータを隠しました。
void MyTreeView::dropEvent(QDropEvent* event)
{
bool dropOK = false;
DropIndicatorPosition dropIndicator = dropIndicatorPosition();
switch (dropIndicator)
{
case QAbstractItemView::AboveItem:
dropOK = true;
break;
case QAbstractItemView::BelowItem:
dropOK = true;
break;
case QAbstractItemView::OnItem:
dropOK = false;
break;
case QAbstractItemView::OnViewport:
dropOK = false;
break;
}
if(dropOK)
{
// Here, you need to manage yourself the case of dropping an item
}
setDropIndicatorShown(false); // hide the drop indicator once the drop is done
}
"ボーナス":あなたはPrimitiveElementPE_IndicatorItemViewItemDrop
することにより、独自のスタイルでドロップインジケータにアクセスすることができます。 hereとhereをカスタマイズする方法がわかります。
これは完全に機能します。 – Carlton