【问题标题】:qtreeview: drag and drop of a subtree results in bad selectionsqtreeview:拖放子树会导致错误选择
【发布时间】: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


    【解决方案1】:

    原来这是通过在 Model::moveTo() 方法中添加以下代码来解决的:

    ...
    emit layoutAboutToBeChanged();
    list->moveTo( ... );
    emit layoutChanged();
    ...
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-11-19
      • 2012-10-17
      • 1970-01-01
      • 2012-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多