MVC Muster richtig anwenden
-
hallo leute,
ich schreibe gerade eine applikation mit dem qt framework und versuche das fundament als mvc/mvp zu realisieren. ich habe ein kleines beispiel implementiert und möcht nun von euch wissen, ob ich richtig oder falsch liege.[b]model.h:[/b] #ifndef MODEL_H #define MODEL_H #include <QObject> #include <QString> class Model : public QObject { public: Model(); QString* getString(); private: QString string; }; #endif // MODEL_H [b]model.cpp:[/b] #include "model.h" Model::Model() { string = "Hallo Welt!"; } QString* Model::getString() { return &string; }
im model wird der string angelegt, soll also nur eine triviales beispiel für einen datenbezug darstellen und kann per getMethode erreicht werden.
[b]view.h:[/b] #ifndef VIEW_H #define VIEW_H #include "ui_view.h" class View : public QMainWindow { Q_OBJECT public: View(QWidget *parent = 0); QTextEdit* getTextEdit(); void setTextEdit(QString *string); private: Ui::View m_ui; }; #endif // VIEW_H [b]view.cpp:[/b] #include "view.h" View::View(QWidget *parent): QMainWindow(parent) { m_ui.setupUi(this); } QTextEdit* View::getTextEdit() { return m_ui.textEdit; } void View::setTextEdit(QString *string) { getTextEdit()->setText(*string); }
in der view wird per set Methode ins textEdit geschrieben.
da qt nach erstellung einer form den erzeugten quellcode in einer seperaten datei ablegt, in diesem fall ui_view.h, muss ich erstmal per get an das textEdit rankommen, um dann damit arbeiten zu können.[b]controller.h:[/b] #ifndef CONTROLLER_H #define CONTROLLER_H #include <QObject> #include <QApplication> #include "model.h" #include "view.h" class Controller : public QObject { public: Controller(); void initialize(); private: Model *model; View *view; }; #endif // CONTROLLER_H [b]controller.cpp:[/b] #include "controller.h" Controller::Controller() { model = new Model(); view = new View(); } void Controller::initialize() { view->setTextEdit(model->getString()); view->show(); }
der controller legt 2 instanzen an, das model und das view. der controller ist also das verbindungsstück zwischen model und view. model und view kennen sich nicht !
#include <QApplication> #include "controller.h" int main( int argc, char* argv[]) { QApplication a(argc, argv); Controller *c = new Controller(); c->initialize(); return a.exec(); }
std main fkt um die applikation zu starten
......................................................
weitere überlegungen :
mein beispiel hat nur ein anzeigelement, das textEdit, sollte es aber mal eingabeelemente geben so müsste nach meiner überlegung nach einer eingabe das view ein signal an den controller senden, der dann wiederum die eingebenen daten an das model weiterreicht.
mfg
marvel