bagaimana metode `setData` gagal?
Dokumentasi QAbstractItemModel.setData, yang telah saya reproduksi di bawah, mengatakan bahwa metode tersebut harus mengembalikan true jika berhasil atau salah jika sebaliknya. Pertanyaan saya adalah sebagai berikut: Bagaimana metode ini tidak berhasil?
bool QAbstractItemModel :: setData (const QModelIndex & index, const QVariant & nilai, int role = Qt :: EditRole)
Menyetel data peran untuk item di index ke nilai.
Mengembalikan nilai benar jika berhasil; jika tidak mengembalikan salah.
Sinyal dataChanged () harus dipancarkan jika data berhasil disetel.
Implementasi kelas dasar mengembalikan nilai salah. Fungsi dan data () ini harus diterapkan ulang untuk model yang dapat diedit.
Catatan: Fungsi ini dapat dijalankan melalui sistem meta-object dan dari QML. Lihat Q_INVOKABLE.
Lihat juga Qt :: ItemDataRole, data (), dan itemData ().
Jawaban
Tujuan dari nilai kembalian setData () adalah untuk menunjukkan apakah informasi yang terkait dengan peran dan QModelIndex telah diedit atau tidak, dan itu akan bergantung pada pengembang jika mengembalikan benar atau salah.
Beberapa contoh yang menggambarkan hal di atas:
Jika Anda ingin model Anda menjadi non-editable (yang secara default adalah model apa pun) maka selalu kembalikan false.
Jika Anda ingin hanya beberapa item yang dapat diedit atau tidak maka Anda akan mengembalikan true atau false tergantung pada item tersebut.
Jika Anda ingin nilai baru memenuhi batasan tertentu. Contoh praktisnya adalah jika item yang akan diedit harus berumur, jadi untuk nilai negatif harus mengembalikan salah, dan untuk kasus lain benar.
Metode ini berada dalam kelas abstrak dan dapat diganti. Jika ditimpa, apa pun bisa terjadi dalam implementasi baru itu, bukan?
Implementasi kelas dasar mengembalikan nilai salah. Fungsi dan data () ini harus diterapkan ulang untuk model yang dapat diedit.
Jadi tidak hanya mungkin itu akan diganti, bahkan diperlukan dalam beberapa kasus. Apa yang dimaksud dengan "berhasil" tergantung pada pelaksana metode penggantian, dan ia dapat mengembalikan trueatau false.