Announcement

Collapse
No announcement yet.

MVP/MVC richtig anwenden

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • MVP/MVC 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.

    Code:
    model.h:
    #ifndef MODEL_H
    #define MODEL_H
    
    #include <QObject>
    #include <QString>
    
    class Model : public QObject
    {
    public:
        Model();
        QString* getString();
    
    private:
        QString string;
    };
    
    #endif // MODEL_H
    
    
    model.cpp:
    #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.


    Code:
    view.h:
    #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
    
    
    view.cpp:
    #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.


    Code:
    controller.h:
    #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
    
    
    controller.cpp:
    #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 !


    Code:
    #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
Working...
X