Strukturierung, wenn man .ui Files verwenden möchte
-
Huhu,
Ich habe ein Programm geschrieben, da ist jetzt aber alles auf folgende Dateien aufgeteilt:
- meinProg.pro
- main.cpp
- mainwindow.cpp
- mainwindow.h
- mainwindow.uiDie Grundstruktur habe ich durch den Qt-Creator mit Neu->Qt4-Gui-Anwendung erhalten. Das Programm funktioniert auch wie erwünscht, mir gefällt es aber nicht, dass quasi alles in einer Monster-Klasse ist.
Ich möchte das jetzt aber ähnlich einer MVC-Struktur haben. Also eine View-Klasse, die sich nur um die GUI kümmert und deren Ausgaben, eine Steuerklasse die alles steuert und eine (kleine) Modell-Klasse, die Dateien abspeichert und verwaltet (und ggf. an die View schickt).
Meine Frage ist, wie unterteile ich mein Programm jetzt in diese Klassen und wer instanziiert wen? Und vorallem, wie kriege ich das mit der .ui-Datei hin (die ich gern so behalten würde).
Hatte es eigentlich so gedacht, dass die main.cpp eine Controllerklasse instanziiert, welche wiederrum View und Model besitzt.
Wie kriege ich das dann aber mit dem .show hin in der main.cpp?Steh da irgendwie auf dem Schlauch wie ich das ganze anfangen soll, ein wenig Pseudocode oder Beispielprogramm wäre nicht schlecht.
Habe schon Beispielprogramme gesehen, allerdings wurde nirgends eine .ui Datei verwendet...
-
ich kann dir die Fragen nicht beantworten aber es müsste im INet bestimmt Tutorial der Art "Migrating MFC Applications to QT" oder so ähnlich geben
-
Hallo,
QT unterstützt explizit den MVC-Gedanken und das Pattern läßt sich gut anwenden.
Dafür solltest du dir aber unbedingt die UI-Tools anschauen, insbesondere den UI-Loader, damit kannst du zur Laufzeit UI-Files laden.
In diesem Sinne sind die UI-Files dein View.Control:
Ich persönlich empfehle für jedes größere xyz.ui-File eine xyzControl-Klasse.
xyzControl ist dann immer von QObject abgeleitet und kriegt alle Events des entsprechenden ui-Objects.Model:
Inzwischen gibts ja sowas wie das QAbstractItemModel.
Ansonsten kommt das ganz auf deine Daten an, wie du das angehst.main.cpp und QApp-Init sehen je nach Anwendung sehr klein aus.
Im Idealfall rufst du da nur MainWindowControl->show() auf.
-
Vertexwahn schrieb:
ich kann dir die Fragen nicht beantworten aber es müsste im INet bestimmt Tutorial der Art "Migrating MFC Applications to QT" oder so ähnlich geben
MFC != MVC
sieh dir mal dieses Beispiel aus der Doku an, vielleicht kann es dir weiterhelfen