Wie kann die setData-Methode fehlschlagen?

Oct 01 2020

Die Dokumentation für QAbstractItemModel.setData, die ich unten reproduziert habe, besagt, dass die Methode true zurückgeben sollte, wenn sie erfolgreich ist, oder andernfalls false. Meine Frage lautet wie folgt: Wie kann diese Methode nicht erfolgreich sein?

bool QAbstractItemModel :: setData (const QModelIndex & index, const QVariant & value, int role = Qt :: EditRole)

Setzt die Rollendaten für das Element am Index auf Wert.

Gibt bei Erfolg true zurück. Andernfalls wird false zurückgegeben.

Das Signal dataChanged () sollte ausgegeben werden, wenn die Daten erfolgreich gesetzt wurden.

Die Basisklassenimplementierung gibt false zurück. Diese Funktion und data () müssen für bearbeitbare Modelle erneut implementiert werden.

Hinweis: Diese Funktion kann über das Metaobjektsystem und über QML aufgerufen werden. Siehe Q_INVOKABLE.

Siehe auch Qt :: ItemDataRole, data () und itemData ().

Antworten

2 eyllanesc Oct 01 2020 at 04:32

Das Ziel des Rückgabewerts von setData () besteht darin, anzugeben, ob die mit der Rolle und dem QModelIndex verknüpften Informationen bearbeitet wurden oder nicht, und es hängt vom Entwickler ab, ob sie true oder false zurückgeben.

Einige Beispiele, die das Obige veranschaulichen:

  • Wenn Sie möchten, dass Ihr Modell nicht bearbeitet werden kann (was standardmäßig ein beliebiges Modell ist), geben Sie immer false zurück.

  • Wenn Sie möchten, dass nur einige Elemente bearbeitet werden können oder nicht, geben Sie je nach Element true oder false zurück.

  • Wenn Sie möchten, dass der neue Wert bestimmte Einschränkungen erfüllt. Ein praktisches Beispiel könnte sein, wenn die zu bearbeitenden Elemente Alter haben müssen, sodass für negative Werte false und für die anderen Fälle true zurückgegeben werden muss.

1 Steve Oct 01 2020 at 04:33

Die Methode befindet sich in einer abstrakten Klasse und kann überschrieben werden. Wenn es überschrieben wird, kann in dieser neuen Implementierung alles passieren, oder?

Die Basisklassenimplementierung gibt false zurück. Diese Funktion und data () müssen für bearbeitbare Modelle erneut implementiert werden.

Es ist also nicht nur möglich, dass es überschrieben wird, es ist in einigen Fällen sogar notwendig. Was "erfolgreich" bedeutet, liegt beim Implementierer der überschreibenden Methode und kann entweder trueoder zurückgeben false.