jak może zawieść metoda setData?

Oct 01 2020

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

2 eyllanesc Oct 01 2020 at 04:32

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.

1 Steve Oct 01 2020 at 04:33

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.