내가 몇 시간 전에 거의 같은 일을했다, 나는 3 가지 생각할 수 있습니다 : 당신의 dropEvent()
을 다시 구현할
다음은 내가 수행 한 작업의 매우 간단한 예입니다.
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
하여 자신 만의 스타일에 드롭 인디케이터 (indicator)에 액세스 할 수 있습니다. here 및 here을 사용자 정의하는 방법을 볼 수 있습니다.
완벽하게 작동합니다. – Carlton