0

3 つの列に異なる項目を追加するこのテーブル ビューがあります。項目は編集可能なので、ビューで直接変更できます。

    bool ClosoidTableModel::setData(const QModelIndex &index, const QVariant &value, int role)
    {
        if (index.isValid() && role == Qt::EditRole) {
            int 行 = index.row();

            ClosoidCurve p = listOfCurves.value(行);

            もし (index.column() == 0)
                p.length = value.toFloat();            
            そうでなければ (index.column() == 1)
                p.startCurvature = value.toFloat();
            そうでなければ (index.column() == 2)
                p.endCurvature = value.toFloat();
            そうしないと
                false を返します。

            listOfCurves.replace(行、p);
            エミット (dataChanged (インデックス、インデックス));

            true を返します。
        }

        false を返します。
    }

上記のメソッドはテーブル モデルで宣言されており、テーブル内のデータを追加するときと変更するときに呼び出されます。

テーブル内の項目を変更した場合にのみシグナルを送信したいのですが、どうすればよいですか? 追加と変更を区別する方法はありますか?

4

1 に答える 1

0

違いについてどこでどのように知りたいですか?正常に動作するモデルは、新しいデータが追加される前後に、rowsAboutToBeInsertedrowsInsertedを発行します。(よくわかりませんが)新しい行のデータの設定は、これらの呼び出しの間に行われるべきだと思います。とにかく、それは一撃の価値があります。そうしないと、最後に挿入された行を追跡し、それを使用して「追加」と「編集」を区別できる場合があります。不完全ですが、おそらくほとんどのユースケースをカバーしています。

于 2011-09-14T20:10:23.897 に答える