按照此处提供的建议:QTreeWidget reordering child items by dragging后,未选中拖动的项目。
所以,很自然地,我试图获取被拖动的项目,然后在其上调用setSelected()。
结果是选择了正确开启前的项目。
我将QTreeWidget子类化为覆盖dropEvent,如下所示 -
QTreeWidgetItem *pItem;
QModelIndex dropIndex = indexAt(pEvent->pos());
if(dropIndex.isValid() == false)
{
pEvent->setDropAction(Qt::IgnoreAction);
pEvent->accept();
return;
}
pItem = this->itemAt(pEvent->pos());
QTreeWidget::dropEvent(pEvent);
如何获取指向已删除的正确QTreeWidgetItem的指针?
答案 0 :(得分:2)
由于被删除的项目可以“落在”目标项目的上方或下方,因此您需要管理这两种情况并计算移动项目的正确索引。例如:
[..]
virtual void dropEvent(QDropEvent * event)
{
QModelIndex droppedIndex = indexAt( event->pos() );
if( !droppedIndex.isValid() )
return;
QTreeWidget::dropEvent(event);
DropIndicatorPosition dp = dropIndicatorPosition();
if (dp == QAbstractItemView::BelowItem) {
droppedIndex = droppedIndex.sibling(droppedIndex.row() + 1, // adjust the row number
droppedIndex.column());
}
selectionModel()->select(droppedIndex, QItemSelectionModel::Select);
}