Bonjour,
Je me tourne vers vous pour vous demander conseil. Disons que j'ai plus ou moins une solution fonctionnelle, mais je veux votre avis. Il n'y a pas vraiment de question que je vais poser, mais une étude de cas que je vais vous exposer et j’espère avoir vos commentaires.
Problématique :
Je dispose de données hétérogènes. Ces données possèdent certains attributs en commun, mais, selon leurs types, peuvent avoir des attributs différents.
L'idée est de pouvoir afficher les attributs en commun dans une qtableview, et que une fois l'utilisateur sélectionne une ligne, l'interface offre les widgets nécessaires à l'affichage des attributs spécifiques.
Ci-joins deux maquettes qui montreront je l’espère un peu plus le rendu souhaité.
Solution réalisé :
- Une classe abstraite contient les attributs communs (hérite de QObject).
- Les classes filles de cette classe héritent de la classe abstraite, et ajoute leurs attributs spécifiques.
- J'hérite de QAbstractTableModel, crée une QList de pointeurs sur la classe abstraite, et définit la méthode data pour qu'elle ne retourne que les attributs en commun.
- Un QTableView se charge d'afficher ce modèle personnalisé.
Maintenant je pense faire un QStackedWidget, contenant les différentes UI des différents types. La classe abstraite possède une méthode getType redéfinie par les classes filles pour retourner le type de l'objet. Le slot on_tableView_clicked se charge de pointer vers le bon widget du QStackedWidget et rempli les différents champs à partir d'un qobject_cast() fait sur l'objet sélectionné.
Questions en vrac :
- Que pensez-vous de cette façon de faire?
- La classe QDataWidgetMapper serait-elle utile pour remplir les différents champs spécifique ?
Merci pour votre aide.
Partager