Question

J'ai un QTableView pour lequel je veux afficher la dernière colonne toujours en mode édition. (C'est un QCombobox où l'utilisateur doit pouvoir toujours modifier la valeur.)

Je pense que j'ai vu la solution dans le Documentation QT, mais je ne le trouve plus. Y a-t-il un moyen simple de le faire?

Je pense que je pourrais archiver cet effet en utilisant openPersistentEditor() Pour chaque cellule, mais je cherche une meilleure façon. (Comme la spécifiant une seule fois pour toute la colonne.)

Était-ce utile?

La solution

Il y a deux possibilités:

Utilisant setIndexWidget, mais Trolltech écrit:

Cette fonction ne doit être utilisée que pour afficher le contenu statique dans la zone visible correspondant à un élément de données. Si vous souhaitez afficher le contenu dynamique personnalisé ou implémenter un widget d'éditeur personnalisé, sous-classez à la place QitemDelegate.

(Et il casse le modèle de modèle / vue…)

Ou en utilisant un délégué paint méthode. Mais ici, vous devez implémenter tout comme les éléments activés / désactivés vous-même.

Autres conseils

Une façon d'obtenir le comportement d'édition automatique est d'appeler la fonction SEDEDITTROGRES () de la vue avec la valeur QAbStractItemView :: AlleDitTriggers.

Pour afficher le contenu d'une colonne donnée d'une certaine manière, jetez un œil à QAbStractItemView :: SetItemDelegateforColumn (). Cela vous permettra de spécifier un délégué personnalisé uniquement pour les éléments qui en ont besoin. Cependant, il ne créera pas automatiquement un widget d'éditeur pour chacun d'eux (il pourrait en principe en des milliers), mais vous pouvez utiliser le délégué pour rendre chaque élément d'une manière qui le fait ressembler à un widget d'éditeur.

La QabStractItemModel::drapeaux La fonction virtuelle est appelée à tester si un élément est modifiable (voir QT :: Firitable). Jeter un coup d'œil à Rendre le modèle modifiable dans le Programmation modèle / vue Documentation.

Je ne vois pas un moyen facile de le faire, mais vous pourrez peut-être gérer en utilisant un délégué. Honnêtement, je ne sais pas exactement comment cela fonctionnerait, mais vous devriez pouvoir faire fonctionner quelque chose si vous essayez assez fort. Si vous obtenez un délégué approprié, vous devriez être en mesure de le régler sur une vue entière, une cellule d'une vue ou simplement une colonne ou une ligne.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top