jak może zawieść metoda setData?
Dokumentacja QAbstractItemModel.setData, którą przytoczyłem poniżej, mówi, że metoda powinna zwracać wartość true, jeśli zakończy się powodzeniem, lub false w przeciwnym razie. Moje pytanie jest następujące: Jak ta metoda może się nie powieść?
bool QAbstractItemModel :: setData (const QModelIndex & index, const QVariant & value, int role = Qt :: EditRole)
Ustawia dane roli dla elementu o indeksie na wartość.
Zwraca wartość true, jeśli się powiedzie; w przeciwnym razie zwraca false.
Sygnał dataChanged () powinien zostać wyemitowany, jeśli dane zostały pomyślnie ustawione.
Implementacja klasy bazowej zwraca wartość false. Ta funkcja i dane () muszą zostać ponownie zaimplementowane w przypadku modeli edytowalnych.
Uwaga: Tę funkcję można wywołać za pośrednictwem systemu meta-obiektów oraz z QML. Zobacz Q_INVOKABLE.
Zobacz także Qt :: ItemDataRole, data () i itemData ().
Odpowiedzi
Celem wartości zwracanej przez setData () jest wskazanie, czy informacje skojarzone z rolą i QModelIndex zostały zmodyfikowane, i będzie zależało od programisty, czy zwróci wartość true czy false.
Kilka przykładów ilustrujących powyższe:
Jeśli chcesz, aby Twój model był nieedytowalny (domyślnie jest to dowolny model), zawsze zwracaj wartość false.
Jeśli chcesz, aby tylko niektóre elementy były edytowalne lub nie, zwrócisz wartość true lub false w zależności od elementu.
Jeśli chcesz, aby nowa wartość spełniała określone ograniczenia. Praktycznym przykładem może być sytuacja, w której elementy do edycji muszą mieć przedziały wiekowe, więc w przypadku wartości ujemnych musi zwracać fałsz, a w pozostałych przypadkach - prawda.
Metoda należy do klasy abstrakcyjnej i można ją przesłonić. Jeśli zostanie nadpisany, wszystko może się wydarzyć w nowej implementacji, prawda?
Implementacja klasy bazowej zwraca wartość false. Ta funkcja i dane () muszą zostać ponownie zaimplementowane w przypadku modeli edytowalnych.
Jest więc nie tylko możliwe, że zostanie zastąpiony, ale w niektórych przypadkach jest to nawet konieczne. Co „udane” jest środkiem do realizatora metody nadrzędnych, a to może powrócić albo truealbo false.