come può fallire il metodo `setData`?
La documentazione per QAbstractItemModel.setData, che ho riprodotto di seguito, dice che il metodo dovrebbe restituire true se ha successo o false in caso contrario. La mia domanda è la seguente: come può questo metodo non avere successo?
bool QAbstractItemModel :: setData (const QModelIndex & index, const QVariant & value, int role = Qt :: EditRole)
Imposta i dati del ruolo per l'elemento all'indice su valore.
Restituisce vero in caso di successo; altrimenti restituisce false.
Il segnale dataChanged () dovrebbe essere emesso se i dati sono stati impostati correttamente.
L'implementazione della classe base restituisce false. Questa funzione e data () devono essere reimplementati per i modelli modificabili.
Nota: questa funzione può essere richiamata tramite il sistema meta-oggetto e da QML. Vedi Q_INVOKABLE.
Vedere anche Qt :: ItemDataRole, data () e itemData ().
Risposte
L'obiettivo del valore restituito da setData () è indicare se le informazioni associate al ruolo e QModelIndex sono state modificate e dipenderà dallo sviluppatore se restituisce true o false.
Alcuni esempi che illustrano quanto sopra:
Se vuoi che il tuo modello non sia modificabile (che per impostazione predefinita è qualsiasi modello), restituisci sempre false.
Se desideri che solo alcuni elementi siano modificabili o meno, restituirai vero o falso a seconda dell'elemento.
Se desideri che il nuovo valore soddisfi determinate restrizioni. Un esempio pratico potrebbe essere se gli elementi da modificare devono essere età, quindi per i valori negativi deve restituire falso e per gli altri casi vero.
Il metodo è in una classe astratta e può essere sovrascritto. Se viene sovrascritto, può succedere di tutto in quella nuova implementazione, giusto?
L'implementazione della classe base restituisce false. Questa funzione e data () devono essere reimplementati per i modelli modificabili.
Quindi non solo è possibile che venga sovrascritto, ma in alcuni casi è anche necessario. Che cosa significa "successo" dipende dall'implementatore del metodo di override e può restituire o trueo false.