【发布时间】:2013-03-03 01:01:23
【问题描述】:
我一直在尝试在 qtreeview 中拖放子树。当我执行 drop 并更新基础模型时,树正确地重新排序,但是,项目选择随后被搞砸了。我还没有想出一种可靠的方法来强制 QT 适当地重新绘制选择。请看下面的截图:
之前:
将顶部节点拖到节点2后:
相关查看代码:
void View::dropEvent(QDropEvent *evt)
{
QTreeView::dropEvent(evt);
QModelIndex start = indexAt(_drag_start);
QModelIndex end = indexAt(evt->pos());
_model->moveTo(start, end);
}
相关型号代码:
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) );
}
有什么建议吗?谢谢!
【问题讨论】:
标签: c++ qt drag-and-drop qtreeview