0

qtreeview でサブツリーをドラッグ アンド ドロップしようとしています。ドロップを実行すると、ツリーは正しく並べ替えられ、基礎となるモデルが更新されますが、アイテムの選択はあとがきで台無しになります。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) );
}

助言がありますか?ありがとう!

4

1 に答える 1

0

これは、Model::moveTo() メソッドに次のコードを追加することで修正されます。

...
emit layoutAboutToBeChanged();
list->moveTo( ... );
emit layoutChanged();
...
于 2013-03-22T14:16:26.520 に答える