前段时间我做了几乎同样的事情,我能想到 3 件事:
这是我正在做的一个非常小的例子。
在 中dragMoveEvent()
,我显示了下降指示器。这样,当您拖动对象时,您将始终显示放置指示器。
void MyTreeView::dragMoveEvent(QDragMoveEvent* event)
{
setDropIndicatorShown(true);
QTreeView::dragMoveEvent(event);
}
在 中dropEvent()
,我正在管理每个案例,也就是说,我拖动的项目是在另一个项目上、在它上面、在它下面还是在视口上。然后,根据它,我正在管理自己的掉落,并且在活动结束时,我隐藏了掉落指示器。
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
}
“奖励” :您可以通过PrimitiveElement 以自己的风格访问放置指示器PE_IndicatorItemViewItemDrop
。您可以在此处和此处查看如何自定义它。