Architecture du projet Qt : architecture MVC

Le modèle MVC représente le modèle Modèle-Vue-Contrôleur (Modèle-Vue-Contrôleur). Ce modèle est utilisé pour le développement en couches d'applications.

  • Modèle - est la partie de l'application qui gère la logique des données de l'application. Habituellement, les objets de modèle sont responsables de l'accès aux données dans la base de données.
  • Afficher (voir) - est la partie de l'application qui gère l'affichage des données. Généralement, les vues sont créées à partir des données du modèle.
  • Contrôleur (contrôleur) - est la partie de l'application qui gère l'interaction de l'utilisateur. En règle générale, le contrôleur est responsable de la lecture des données à partir de la vue, du contrôle des entrées de l'utilisateur et de l'envoi des données au modèle.

La superposition MVC permet de gérer des applications complexes car vous pouvez vous concentrer sur un aspect à la fois. Par exemple, vous pouvez vous concentrer sur la conception des vues sans vous fier à la logique métier. Cela facilite également le test de l'application.

La superposition MVC simplifie également le développement de groupe. Différents développeurs peuvent développer des vues, une logique de contrôleur et une logique métier en même temps.

Prenez le code C++ comme exemple pour concevoir une démo de bataille de héros (Hero). Hero1 attaque Hero2, Hero2 perd du sang en continu et l'interface utilisateur est mise à jour de manière synchrone. Les trois principales classes sont Hero (classe de données de héros), HeroView (classe d'interface utilisateur de héros, telle que la barre de sang) et HeroController (classe de contrôleur de héros, classe de gestion de héros).

Les avantages de cet article, gratuit pour recevoir le package de matériel d'apprentissage du développement Qt, vidéo technique, y compris (base du langage C++, introduction à la programmation Qt, signal QT et mécanisme de slot, dessin d'image de développement d'interface QT, réseau QT, programmation de base de données QT, QT project combat, QSS, OpenCV, Quick module, interview questions, etc.)

La classe Héros :

#pragma once 
 
class Hero
{
public:
    Hero();
    ~Hero();
    //be attacked
    void beAttack(int att);
    //is dead?
    bool dead() { return m_nHp == 0; }
    public:
    //set no
    void setNo(std::string no) { m_sNo = no; }
    //get no
    std::string getNo() { return m_sNo; }

    //set name
    void setName(std::string name) { m_sName = name; }
    //get name
    std::string getName() { return m_sName; }

    //get hp
    void setHp(int hp) { m_nHp = hp; }
    //set hp
    int getHp() { return m_nHp; }

    //set att
    void setAtt(int att) { m_nAtt = att; }
    //get att
    int getAtt() { return m_nAtt; }
private:

    std::string m_sName;//姓名
    std::string m_sNo;//游戏场号码

    int m_nHp;//血量
    int m_nAtt;//攻击力
};
#include "stdafx.h"
#include "Hero.h"

//ctor
Hero::Hero()
{
}

//Destructor
Hero::~Hero()
{
 
}
 
void Hero::beAttack(int att)
{
    if (att <= 0) throw "Att Number <= 0";//safe check
    m_nHp -= att;
    m_nHp = m_nHp < 0 ? 0 : m_nHp;//safe check
}

La classe HeroView :

#pragma once
class HeroView
{
public:
    HeroView();
    ~HeroView();

    //show hero UI data;
    void show(string no, string name,int att, int hp);
    //show hero dead UI;
    void dead(string no, string name);
    //show heor winned UI;
    void winned(string no, string name);
    private:
    //Hero* m_hero;
};
#include "stdafx.h"
#include "HeroView.h"

HeroView::HeroView()
{
}

HeroView::~HeroView()
{
}

void HeroView::show(string no,string name, int att, int hp)
{
    cout << "Hero info:"<<"(no:"<<no<<",name:"<<name<<",att:"<<att<<",hp:"<<hp<<")" << endl;
}

void HeroView::dead(string no, string name)
{
    cout << "Hero Dead:" << "(no:" << no << ",name:"<<name << ")" << endl;
}

void HeroView::winned(string no, string name)
{
    cout << "Hero Winned:" << "(no:" << no << ",name:" << name << ")" << endl;

}

La classe HeroController :

#pragma once
class HeroController
{
public:
      HeroController(string no, string name);
      ~HeroController();
      void setHeroHp(int hp);//set hero hp
      void setHeroAtt(int att);//set hero att
      void show();//show hero info
      void beAttack(int att);//be attacked by hero
      void dead();//dead
      void winned();//winned

     Hero* getHero() { return m_hero; }//get hero
 
private:
     Hero * m_hero;//hero
     HeroView * m_heroView;//hero view
};
#include "stdafx.h"
#include "HeroController.h"
 
HeroController::HeroController(string no, string name)
{
    m_heroView = new HeroView();
    m_hero = new Hero();
    m_hero->setNo(no);
    m_hero->setName(name);
}

HeroController::~HeroController()
{
}

void HeroController::setHeroHp(int hp)
{
    m_hero->setHp(hp);
}

void HeroController::setHeroAtt(int att)
{
    m_hero->setAtt(att);
}

void HeroController::show()
{
    m_heroView->show(m_hero->getNo(), m_hero->getName(),m_hero->getAtt(), m_hero->getHp());
}

void HeroController::beAttack(int att)
{
    m_hero->beAttack(att);
}

void HeroController::dead()
{
    m_heroView->dead(m_hero->getNo(),m_hero->getName());
}

void HeroController::winned()
{
    m_heroView->winned(m_hero->getNo(), m_hero->getName());
}

test principal() :

// ConsoleApplication_C++1.cpp: 主项目文件。
  
#include "stdafx.h"

using namespace System;

int main()
{
    //初始化一个英雄的控制器
    HeroController* controller = new HeroController("2017","孟栋");
    //设置血量100
    controller->setHeroHp(100);
    controller->setHeroAtt(40);
    //显示一下血量
    controller->show();

    //初始化第二个英雄的控制器
    HeroController* controller2 = new HeroController("2016", "黑魔王");
    //设置血量100
    controller2->setHeroHp(200);
    //设置攻击力20
    controller2->setHeroAtt(20);
    //显示一下血量
    controller2->show();

    //hero1 attack hero2
    controller2->beAttack(controller->getHero()->getAtt());
    //ui更新
    controller2->show();

    //如果没有dead,就一直攻击
    while (!controller2->getHero()->dead())
    {
        //hero1 attack hero2
        controller2->beAttack(controller->getHero()->getAtt());
        //ui更新
        controller2->show();
    }

    controller2->dead();
    controller->show();
    controller->winned();

    return 0;
}

La sortie de la console est la suivante :

Hero info : (no:2017, name : 孟栋, att : 40, hp : 100)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 200)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 160)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 120)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 80)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 40)
Hero info : (no : 2016, name : 黑魔王, att : 20, hp : 0)
Hero Dead : (no : 2016, name : 黑魔王)
Hero info : (no : 2017, name : 孟栋, att : 40, hp : 100)
Hero Winned : (no : 2017, name : 孟栋)

 Les avantages de cet article, gratuit pour recevoir le package de matériel d'apprentissage du développement Qt, vidéo technique, y compris (base du langage C++, introduction à la programmation Qt, signal QT et mécanisme de slot, dessin d'image de développement d'interface QT, réseau QT, programmation de base de données QT, QT project combat, QSS, OpenCV, Quick module, interview questions, etc.)

Je suppose que tu aimes

Origine blog.csdn.net/QtCompany/article/details/131584355
conseillé
Classement