Vos recrutements informatiques

700 000 développeurs, chefs de projets, ingénieurs, informaticiens...

Contactez notre équipe spécialiste en recrutement

FAQ Qt FAQ Qt Creator FAQ PyQt & PySide

FAQ QtConsultez toutes les FAQ

Nombre d'auteurs : 26, nombre de questions : 298, dernière mise à jour : 6 mai 2017 

 
OuvrirSommaireModulesQt GUI et Qt WidgetsSystèmes d'affichageItem View

Pour pouvoir intégrer un delegate dans une vue, il faut tout d'abord sous-classer QItemDelegate (ou bien QAbstractItemDelegate), puis redéfinir sa fonction paint(). Une fois cela fait, il ne reste plus qu'à intégrer une instance de la classe créée dans la vue en question par le biais d'une des fonctions suivantes, fournies par QAbstractItemView, donc disponibles pour QTreeView, QListView, etc.

QAbstractItemView est une classe très utile car elle propose des méthodes permettant d'afficher des éléments dans des modèles. Elle permet aussi de modifier leurs propriétés par le biais du modèle conteneur, ce qui la rend plutôt attrayante. Passer par QItemDelegate pour réaliser des delegates de simples widgets permet à ces derniers de bénéficier de possibilités plus vastes que celles qui sont proposées par QAbstractItemView. Quant à elle, la classe QStyledItemDelegate est recommandée lors de la création de delegates personnalisés ou bien lors de l'utilisation de feuilles de style.

La méthode sizeHint() est une méthode très utile dans le sens où elle permet de récupérer la taille que devrait avoir le delegate. C'est pour cela qu'il est possible de la réimplémenter.

La fonction paint() est sans doute la méthode la plus importante de celles qui sont disponibles pour les delegates. En effet, c'est elle qui permet de leur concevoir un rendu graphique. Si vous souhaitez offrir un rendu personnalisé à votre delegate, c'est cette méthode que vous devrez réimplémenter.

Exemple simple d'intégration d'une barre de progression dans un QTreeView
CacherSélectionnez
Mis à jour le 31 octobre 2009  par Louis du Verdier

Il n'y a pas de liens de parenté entre ces deux-là. Au début il arrive de se tromper entre Item View et Graphics View, simplement car il y a "View" dans les deux noms. Graphics View permet de dessiner et gérer des objets 2D. Item View permet de gérer des éléments (les items), et de les représenter visuellement (en table, liste et arbre). Rien n'empêche de combiner ces deux infrastructures, mais il faut prendre garde à ne pas les confondre lorsque l'on parcourt la documentation ou lorsque l'on réfère à l'un de ces éléments.

Mis à jour le 7 mai 2012  par Benjamin Poulain

Model View est l'infrastructure de Qt qui permet de gérer les vues arborescentes, les listes et les tables. Il se base sur un pattern Model-View-Delegate.

Le modèle est une interface vers les données, ce qui permet d'abstraire la façon dont celles-ci sont représentées (mémoire, base de données, système de fichier, etc.).

La vue est la représentation visuelle des données sur l'écran. Qt fournit trois types de représentations : liste (QListView), arbre (QTreeView) et tableaux (QTableView).

Le délégué permet de faire le lien entre la vue et le modèle. Le délégué se charge de dessiner les éléments du modèle dans la vue, et de gérer l'édition de ces éléments.

Par rapport à Modèle-Vue-Contrôleur, le délégué est une sorte de super-contrôleur. Il génère un éditeur à la demande de la vue, et se charge de faire parvenir les informations au modèle, c'est son rôle de contrôleur. En plus de cela, le délégué se charge de dessiner les éléments du modèle, ce qui permet de personnaliser complètement la vue.

Exemple d'utilisation de Model View en utilisant le système de fichier comme modèle
CacherSélectionnez
Mis à jour le 7 mai 2012  par Benjamin Poulain

Les QTreeWidget trient leurs items grâce à l'opérateur < des QTreeWidgetItem. Par défaut, cet opérateur compare deux QString. Malheureusement, ceci ne correspond pas toujours à ce que l'on souhaite.

Pour y remédier, il suffit de créer sa propre classe d'item qui hérite de QTreeWidgetItem et qui redéfinit cet opérateur. Le principe utilisé est celui du polymorphisme.

Exemple : différence entre le tri lexical de QTreeWidgetItem et le tri numérique implémenté par notre classe item

Trier un QTreeWidget
CacherSélectionnez
Mis à jour le 7 mai 2012  par Yan Verdavaine

Les QListWidget trient leurs items avec l'opérateur < des QListWidgetItem. Par défaut, cet opérateur compare deux QString. Malheureusement, ceci ne correspond pas toujours à ce que l'on souhaite. Pour y remédier, il suffit de créer sa propre classe d'item qui hérite de QListWidgetItem et qui redéfinit cet opérateur. Le principe utilisé est celui du polymorphisme.

Différence entre le tri par ordre croissant numérique implémenté par notre classe item (vue de gauche) et le tri par ordre croissant lexical des QListWidgetItem (vue de droite).

Trier un QListWidget
CacherSélectionnez
Mis à jour le 7 mai 2012  par Yan Verdavaine

Pour effacer le contenu d'un QTableWidget c'est très simple, il faut tout d'abord effacer les QTableWidgetItem qu'il contient puis effacer toutes les lignes du tableau.

 
Sélectionnez
//On efface les QTableWidgetItem contenus dans le tableau
tableWidget->clear();
//On efface toutes les lignes du tableau
tableWidget->setRowCount(0);
Mis à jour le 7 juillet 2009  par François Jaffré

Les classes QListView, QTreeView et QTableView héritent toutes les trois de QAbstractItemView qui possède la propriété selectionMode.

Elle peut être définie par la fonction setSelectionMode() qui prend en paramètre l'un des types suivants :

  • QAbstractItemView::SingleSelection : quand l'utilisateur sélectionne un élément, tous autres éléments déjà sélectionnés ne le sont plus. L'utilisateur ne peut pas désélectionner un élément en cliquant dessus ;
  • QAbstractItemView::ContiguousSelection : quand l'utilisateur sélectionne un élément de façon normale, les éléments déjà sélectionnés ne le sont plus et le nouvel élément est sélectionné. Cependant, si l'utilisateur garde appuyée la touche Maj en cliquant sur l'élément, tous les éléments entre celui courant et celui cliqué sont sélectionnés ou désélectionnés en fonction de l'état de l'élément cliqué ;
  • QAbstractItemView::ExtendedSelection : quand l'utilisateur sélectionne un élément de façon normale, les éléments déjà sélectionnés ne le sont plus et le nouvel élément est sélectionné. Si l'utilisateur garde appuyée la touche Ctrl en cliquant sur l'élément, il sera sélectionné et les autres éléments inchangés. Il est possible de combiner cette action avec la précédente en gardant appuyée la touche Maj ;
  • QAbstractItemView::MultiSelection : quand l'utilisateur sélectionne un élément de façon normale, il devient sélectionné et les autres éléments inchangés. Plusieurs éléments peuvent être sélectionnés en déplaçant la souris au-dessus d'eux ;
  • QAbstractItemView::NoSelection : les éléments ne peuvent pas être sélectionnés.

Les classes QListWidget, QTreeWidget et QTableWidget peuvent également utiliser cette propriété du fait qu'elles héritent respectivement des classes citées ci-dessus.

Créé le 7 mai 2012  par Jonathan Courtois
  

Les sources présentées sur cette page sont libres de droits et vous pouvez les utiliser à votre convenance. Par contre, la page de présentation constitue une œuvre intellectuelle protégée par les droits d'auteur. Copyright © 2006 - 2017 Developpez LLC. Tous droits réservés Developpez LLC. Aucune reproduction, même partielle, ne peut être faite de ce site et de l'ensemble de son contenu : textes, documents et images sans l'autorisation expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à trois ans de prison et jusqu'à 300 000 € de dommages et intérêts.