如何获得QTreeWidget内部项目移动的通知?

neu*_*rte 4 c++ notifications qt qtreewidget

我将一个QTreeWidget子类化,将其dragDropMode设置为InternalMove并使用自定义项填充它,其中一些可以被拖动,其他可以接受丢弃.用户可以按预期在树周围移动项目.但我需要通知项目顺序的变化并做出适当的反应.不幸的是,没有与我可以连接的树内物品移动相关的信号.

我尝试获取QTreeWidget的底层模型()的句柄,然后连接到其rowsMo​​ved信号,但在内部移动期间似乎没有发出.

我重新实现了QTreeWidget的dropEvent(),但没有办法确定那里的目标行索引.

dropMimeData()事件不会被调用在所有的内部动作,显然.

我可以尝试其他任何方法吗?谢谢.

Dan*_*ité 6

在重新实现中dropEvent(),您应该能够找到目标行索引和项目:

void
subclass::dropEvent(QDropEvent* event)
{
  QModelIndex index = indexAt(event->pos());
  if (!index.isValid()) {  // just in case
    event->setDropAction(Qt::IgnoreAction);
    return;
  }
  QTreeWidgetItem* destination_item = itemFromIndex(index);
  ....
}
Run Code Online (Sandbox Code Playgroud)