`setData`メソッドはどのように失敗しますか?
QAbstractItemModel.setData以下に再現したのドキュメントには、成功した場合はメソッドがtrueを返し、そうでない場合はfalseを返す必要があると記載されています。私の質問は次のとおりです。この方法がうまくいかないのはどうしてですか?
bool QAbstractItemModel :: setData(const QModelIndex&index、const QVariant&value、int role = Qt :: EditRole)
インデックスのアイテムのロールデータを値に設定します。
成功した場合はtrueを返します。それ以外の場合はfalseを返します。
データが正常に設定された場合、dataChanged()シグナルが発行されます。
基本クラスの実装はfalseを返します。この関数とdata()は、編集可能なモデル用に再実装する必要があります。
注:この関数は、メタオブジェクトシステムおよびQMLから呼び出すことができます。Q_INVOKABLEを参照してください。
Qt :: ItemDataRole、data()、およびitemData()も参照してください。
回答
setData()の戻り値の目的は、ロールとQModelIndexに関連付けられた情報が編集されたかどうかを示すことであり、trueまたはfalseを返すかどうかは開発者によって異なります。
上記を説明するいくつかの例:
モデルを編集不可(デフォルトでは任意のモデル)にしたい場合は、常にfalseを返します。
一部のアイテムのみを編集可能にするかどうかを指定する場合は、アイテムに応じてtrueまたはfalseを返します。
新しい値が特定の制限を満たすようにしたい場合。実用的な例としては、編集するアイテムが年齢である必要がある場合、負の値の場合はfalseを返し、その他の場合はtrueを返す必要があります。
このメソッドは抽象クラスにあり、オーバーライドできます。上書きされた場合、その新しい実装で何かが起こる可能性がありますよね?
基本クラスの実装はfalseを返します。この関数とdata()は、編集可能なモデル用に再実装する必要があります。
したがって、オーバーライドされる可能性があるだけでなく、場合によっては必要になることもあります。「成功」とは、オーバーライドするメソッドの実装者次第であり、trueまたはのいずれかを返すことができますfalse。