0

アイテムの再配置のためにモデル/ビューをインストルメント化していますが、メソッドをオーバーライドする方法を理解できていませんinsertRows。練習のためにstd::vector、カスタム構造でラップしようとしています。

std::vector<aStruct> mD;//my data
bool insertRows(int start, int rows, const QModelIndex & parent)
{
    auto i = parent.row();
    cout <<"I going to " << start << ":" << rows << " choosing "<< i<< endl;
    beginInsertRows(parent, start, start + rows - 1);
    aStruct blank(0);// Should be the value of the item being moved?
    mD.insert(mD.begin()+start,blank);
    endInsertRows();
    return true;
}

残念ながら、移動中のアイテムを保持する要素に到達する場所が見つからないようです。どうすればいいですか?

4

2 に答える 2

1

とはカスタム モデル クラスのメンバーであるmDと仮定します。insertRows

insertRows挿入された行の内容に関する情報は受け取りません。空の値を挿入する必要があります。setData仮想メソッドの実装では、行にデータを入力する必要があります。

于 2013-07-29T07:58:43.030 に答える
0

行を挿入するには、次の手順を使用する必要があります。

1. Call beginInsertRows
2. Modify your internal data structure
3. Call endInsertRows

あなたのサンプルにはすべてOKがあります。

ビューは空の行を挿入し(@Riatecheが言ったように)、の呼び出し後に自動的endInsertRowsに入力します。必要なのは、YourModel::dataメソッドをオーバーライドして、mD 構造から正しいデータを返すことだけです。

ビューはYourModel::data、空の行を挿入した直後にメソッドを呼び出します。余分な操作を行う必要はありません。ビューはそれを「埋める」ことを気にします。

メソッドのオーバーライドはYourModel::setData、ユーザーがビュー ウィジェットを介してデータを変更したい場合に、ビューとモデルの間の対話に主に使用されます。

于 2013-07-29T09:55:57.280 に答える