qtreeview:子树的拖放导致选择不正确
问题描述:
我一直在试图拖放qtreeview中的子树。当我执行放置操作时,树会正确地重新排序,并且底层模型会更新,但是,项目选择会在后续操作中搞砸。我无法想出一个可靠的方法来强制QT适当地重新绘制选择。请参见下面的屏幕截图:qtreeview:子树的拖放导致选择不正确
之前:
相关视图代码:
void View::dropEvent(QDropEvent *evt)
{
QTreeView::dropEvent(evt);
QModelIndex start = indexAt(_drag_start);
QModelIndex end = indexAt(evt->pos());
_model->moveTo(start, end);
}
相关的模型
顶部节点拖动到节点2后代码:
void Model::moveTo(QModelIndex& start, QModelIndex& end)
{
// ... omitted some error checking code to ensure start and end have the same parent
ModelData* a = (ModelData*) start.internalPointer();
ModelData* b = (ModelData*) end.internalPointer();
ModelData* list = (ModelData*) (parent(start).internalPointer());
int idxa = list->indexOf(a);
int idxb = list->indexOf(b);
// underneath this is QList<...>::moveTo
list->moveTo(idxa, idxb);
QModelIndex p = this->parent(start);
emit dataChanged(index(0, 0, p), index(rowCount(p)-1, 1, p));
}
有什么建议吗?谢谢!
答
原来这是通过添加以下代码在Model :: moveTo()方法固定:
...
emit layoutAboutToBeChanged();
list->moveTo(...);
emit layoutChanged();
...