1

QAbstractTableModelから独自のモデル クラスを派生させた Qt アプリケーションがあります。ドキュメントに規定されている必要なメソッドを実装しました。removeRowsメソッドを呼び出すと、ビューで変更が正しく行われます (削除したい行が削除されます)。

しかし、どういうわけか、モデルでの操作は、モデルでデータを保存するために使用する QList に反映されていないようです。QList に保存されている値をディスクに保存すると、removeRows によって何も消去されていないように見えます。

私の removeRows の実装は次のようになります (これはAdvanced Qt Programming、Chapter 3、p.125 のコードに基づいています):

bool MyModel::removeRows(int row, int count, const QModelIndex&)
{
    beginRemoveRows( QModelIndex(), row, row + count - 1);

    for (int i = 0; i < count; ++i) {
        mMyQList.removeAt(row);
    }

    endRemoveRows();

    return true;
}

これを修正するにはどうすればよいですか? 私は何を取りこぼしたか?

ありがとう!

4

2 に答える 2

1

フランクO.が示唆するように、コードを見ずに何が起こっているのかを知ることは困難です。しかし、その音からすると、値を削除していないという理由だけで、値がQListから削除されていません。ウィジェットからモデル/ビュークラスに移動するときは、これを自分で行う必要があります。つまり、removeRows()メソッドでは、QListから行を「手動で」削除する必要があります。

于 2011-03-27T00:52:20.620 に答える
0

removeRows の実装に問題はなかったことがわかりました。

save メソッドは、ダイアログを表示する直前に単体テストによって呼び出されました。ダイアログは保存メソッドをまったく呼び出していませんでした。

変更が出力ファイルではなくビューに表示されたのも不思議ではありません...

于 2011-03-27T01:52:03.757 に答える