comment la méthode `setData` peut-elle échouer?
La documentation pour QAbstractItemModel.setData, que j'ai reproduite ci-dessous, indique que la méthode doit retourner true en cas de succès ou false dans le cas contraire. Ma question est la suivante: comment cette méthode peut-elle échouer?
bool QAbstractItemModel :: setData (const QModelIndex & index, const QVariant & value, int role = Qt :: EditRole)
Définit les données de rôle de l'élément à l'index sur valeur.
Renvoie vrai en cas de succès; sinon retourne false.
Le signal dataChanged () doit être émis si les données ont été correctement définies.
L'implémentation de la classe de base renvoie false. Cette fonction et data () doivent être réimplémentées pour les modèles modifiables.
Remarque: Cette fonction peut être appelée via le système de méta-objets et depuis QML. Voir Q_INVOKABLE.
Voir aussi Qt :: ItemDataRole, data () et itemData ().
Réponses
L'objectif de la valeur de retour de setData () est d'indiquer si les informations associées au rôle et au QModelIndex ont été modifiées ou non, et cela dépendra du développeur si elle renvoie vrai ou faux.
Quelques exemples qui illustrent ce qui précède:
Si vous voulez que votre modèle ne soit pas modifiable (qui par défaut est n'importe quel modèle), retournez toujours false.
Si vous souhaitez que seuls certains éléments soient modifiables ou non, vous retournerez vrai ou faux en fonction de l'élément.
Si vous souhaitez que la nouvelle valeur respecte certaines restrictions. Un exemple pratique pourrait être si les éléments à modifier doivent être des âges, donc pour les valeurs négatives, il doit renvoyer false, et pour les autres cas, true.
La méthode est dans une classe abstraite et peut être remplacée. S'il est écrasé, tout peut arriver dans cette nouvelle implémentation, n'est-ce pas?
L'implémentation de la classe de base renvoie false. Cette fonction et data () doivent être réimplémentées pour les modèles modifiables.
Il n'est donc pas seulement possible que cela soit annulé, c'est même nécessaire dans certains cas. Ce que signifie «réussi» dépend de l'implémenteur de la méthode de substitution, et il peut renvoyer soit trueou false.