Qt Forum

    • Login
    • Search
    • Categories
    • Recent
    • Tags
    • Popular
    • Users
    • Groups
    • Search
    • Unsolved

    Update: Forum Guidelines & Code of Conduct

    MVC Design unter Qt - Sinn (des Controllers)

    German
    2
    5
    3119
    Loading More Posts
    • Oldest to Newest
    • Newest to Oldest
    • Most Votes
    Reply
    • Reply as topic
    Log in to reply
    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      Threadcore last edited by

      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

      1 Reply Last reply Reply Quote 0
      • T
        tobias.hunger last edited by

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

        1 Reply Last reply Reply Quote 0
        • T
          Threadcore last edited by

          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

          1 Reply Last reply Reply Quote 0
          • T
            tobias.hunger last edited by

            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.

            1 Reply Last reply Reply Quote 0
            • T
              Threadcore last edited by

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

              1 Reply Last reply Reply Quote 0
              • First post
                Last post