come può fallire il metodo `setData`?

Oct 01 2020

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

2 eyllanesc Oct 01 2020 at 04:32

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.

1 Steve Oct 01 2020 at 04:33

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.