[英]QTreeView - how to tell if a drag/drop event is a reorder or a move between parents?
前段时间我做了几乎相同的事情,我可以想到3件事:
dropEvent()
,也许你的dragMoveEvent()
; 这是我正在做的一个非常小的例子。
在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
}
“Bonus” :您可以通过PrimitiveElement PE_IndicatorItemViewItemDrop
以您自己的风格访问drop指示器。 你可以在这里和这里看到如何自定义它。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.