2011-01-03 1 views
0

Je construis une application de bureau en QT (bien que cela puisse ne pas être pertinent) et j'ai du mal à travailler à travers la structure de classe et la mise en page. Le modèle de données est assez simple avec un conteneur racine avec un certain nombre de conteneurs d'éléments. Pensez à la représentation suivante:Quel niveau de séparation mes éléments d'interface utilisateur et mes objets de modèle devraient-ils avoir?

L'interface utilisateur est assez simple et suit ce modèle de données avec une fenêtre principale avec une zone défilante (racine), les widgets qui contiennent des mises en page (parents) de widgets personnalisés (enfants) avec des étiquettes et les boutons. Mon problème est de gérer les événements qui doivent remonter la chaîne, puis redescendre, comme déplacer un enfant d'un parent à un autre, déplacer des éléments ou mettre à jour des métadonnées enfant qui affectent plusieurs autres widgets. Je divise actuellement les widgets de l'interface utilisateur et les objets du modèle, mais le fait que chaque widget et l'objet de modèle correspondant pointent les uns vers les autres est lourd et je pense que cela entraîne trop de maintenance.

Répondre

5

Je vous suggère de suivre un modèle standard et MVC s'assurer qu'il n'y a pas de dépendances du modèle à la vue; dans votre cas, cela signifie que, bien qu'il y ait un widget pour chaque élément du modèle, les éléments du modèle ne référencent pas les widgets correspondants. Bien que le modèle MVC présente de nombreuses variantes, l'une des façons d'y parvenir consisterait à avoir une classe de vues surveillant le modèle pour toutes les modifications et mettant à jour la vue en conséquence (en connectant un emplacement dans la classe de vue à un signal émis par la classe du modèle). Toutes les modifications que l'utilisateur initie par le point de vue peut alors être:

1) traitées directement par le modèle par un simple signal/slot connexion
2) traitées par une classe de commande qui peut directe du modèle pour mettre à jour En conséquence, l'un ou l'autre de ces éléments provoquerait l'émission d'un signal de mise à jour par le modèle, ce qui entraînerait la mise à jour de votre vue. L'avantage de ceci est la possibilité de changer votre vue (ou d'ajouter des vues supplémentaires) sans avoir à mettre à jour votre modèle.

Je vous recommande de lire Qt's Model/View Programming Guide pour mieux comprendre comment fonctionne MVC dans Qt et pour voir s'il existe une classe ou une interface existante (par exemple QAbstractItemModel) que vous pourriez utiliser au lieu de faire votre propre.

Questions connexes