MVC Design unter Qt - Sinn (des Controllers)



  • Guten Tag zusammen

    Wir haben als Schulprojekt semesterbegeitend den Auftrag, eine Applikation zu designen und zu entwickeln. Als Sprache wurde Java vorgeschlagen, aber man darf auch andere Sprachen verwenden (C++, C#, Objective-C). Ich werde mit Java nicht warm, dachte mir aber, spring mal über deinen eigenen Schatten und schaue Java in Verbindung mit Swing an.

    Mein Plan ist es, ein Chatserver aufzubauen und diesen mit diversen Clients kommunizieren zu lassen. Ich bin aber recht schnell beim Schreiben von Machbarkeitstest auf gewisse Grenzen gestossen (Die IO Reader sind blocked und können nicht unterbrochen werden, sofern man nicht die NIO Klassen verwendet - ferner geht mir das ganze AWT/Swing Gemisch auf die Nerven - Swing kann, sofern man Qt kennt, alles andere als überzeugen und das Designen von Swing Uis ohne Designer ist eine Höllenqual). Ich vermisse klar ich das Signal/Slot denken von Qt. Ich bin mir ernsthaft am überlegen, nicht doch auf Qt zu wechseln (darum die Frage wegen MVC).

    Nun zu meiner eigentlichen Frage. Ich habe mich in diesem Java-Projekt mal an einen MVC Aufbau gewagt, welcher auch recht gut und sauber steht. Grob gesagt:

    View: Baut UI auf und lässt die Button-Events im Controller registrieren. Wird über einen Observer benachrichtigt, wenn sich im Model was ändert
    Controller: Entscheidungsschnittstelle, ruft Methoden in View mit Daten von Model auf
    Model: Implementiert einen Observer, liest Netzwerkdaten (und erstellt einen notify bei Änderungen)

    Nun habe ich in Qt auf die Schnelle keinen solchen Observer Ansatz gefunden, angeblich wird dieser durch das Signal/Slot Prinzip symbolisiert. Wie sieht nun aber eine typische MVC Qt-Applikation aus, welche zB eine Variable in Model liesst und per Observer (Sofern man das in Qt so macht) View benachrichtigt - oder ersetzt Signal/Slot mehr oder weniger gleich den Controller, respektive macht ihn überflüssig ?

    In Qt war meine Root-Klasse bisher immer die Klasse mit der GUI. Ich habe dann eine Netzwerkklasse geschrieben, welche über Signal/Slots und emiten die GUI Klasse benachrichtigt, welche sich dann die Daten aus der Netzwerkklasse holt. Ich weiss aber nicht wie sauber das ist und würde daher gern mehr nach MVC Prinzip designen.

    Wie sieht das zB anhand eines Buttons aus, welcher eine Variable aus einer Methode im Model holt.

    Gruss & schönes WE


  • Moderators

    Schau dir QAbstractItemModel und Q*View an, die machen MVC (allerdings ohne C:).



  • Hallo Tobias

    Q*View sind ja nur die Views eines (eigentlich) einfachen normalen Widgets, (Sprich model und view sind getrennt, siehe "hier":http://doc.qt.digia.com/4.7-snapshot/modelview.html )

    Ich bin mehr auf der Suche nach einem Model/View/Controller Beispiel für eine kleine Applikation. Ich bin mir nicht sicher ob in Qt überhaupt noch ein Controller verwendet wird oder dieser nicht gleich mit dem View verschmilzt.

    Meine Idee wäre: Wenn sich das Model verändert, emitet es an View. Eine Verbindung kann ich ja im View-Konstrukutor an Model hängen, da ich dieses ja auch dort erstelle. Ich weiss nur nicht, wie (Qt-)gängig sowas ist - sozusagen totales Neuland, darum wäre ich über Input glücklich

    Gruss


  • Moderators

    Der Controller von MVC ist verteilt über die View und ihre Delegates.

    Das Model hat eine Reihe von Signalen, über die es der View mitteilt, was sich verändert hat. Das entspricht schon der Idee von MVC.



  • Sorry für die späte Antwort. Okay, gut zu wissen, dann habe ich also bis jetzt nicht wirklich etwas "falsch gemacht" ;)


Log in to reply
 

Looks like your connection to Qt Forum was lost, please wait while we try to reconnect.