J'ai un QTreeView avec des données qui changent avec le temps, un signal dataChanged étant émis dans le QAbstractItemModel chaque seconde. Les éléments de QTreeView peuvent également être édités, mais lorsqu'un éditeur est ouvert pour un certain élément, la chaîne de l'éditeur est mise à jour pendant que je l'édite, ce qui est très ennuyeux. Toute façon d'empêcher un éditeur d'être mis à jour avec les nouvelles valeurs?Arrêter la mise à jour d'un seul QModelIndex
0
A
Répondre
1
Utilisez-vous votre propre modèle avec QTreeView? Dans ce cas, vous l'écrasez et ne renvoyez aucune donnée pour Qt :: EditRole. Si cela ne vous convient pas (vous voulez avoir les données actuelles dans le champ lorsque vous commencez à les éditer), vous pouvez créer votre propre QItemDelegate/QStyledItemDelegate et y implémenter une logique personnalisée: faites en sorte que le widget ne soit pas mis à jour avec une nouvelle valeur, quand il a l'accent, par exemple.
Bien que je puisse manquer quelque chose, il existe un moyen plus simple de le faire.
Comment puis-je empêcher la mise à jour dans le cas où le délégué a le focus? le simple remplacement de update() empêcherait mon entrée d'être affichée pendant que je tape la valeur, n'est-ce pas? – fawick
Je ne suis pas sûr à 100% que cette méthode va fonctionner, mais essayez primordial \t virtual void Q [Styled] ItemDelegate :: setEditorData (QWidget * éditeur, const QModelIndex & index) const Et dans le corps do rien, si editor-> hasFocus() est vrai. Sinon, appelez l'implémentation de base. –
fonctionne comme un charme, merci 1.0e6 – fawick