Qt 项目架构之----MVC架构

这篇具有很好参考价值的文章主要介绍了Qt 项目架构之----MVC架构。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

MVC 模式代表 Model-View-Controller(模型-视图-控制器) 模式。这种模式用于应用程序的分层开发。

  • Model(模型)-是应用程序中用于处理应用程序数据逻辑的部分。通常模型对象负责在数据库中存取数据。
  • View(视图) -是应用程序中处理数据显示的部分。通常视图是依据模型数据创建的。
  • Controller(控制器) - 是应用程序中处理用户交互的部分。通常控制器负责从视图读取数据,控制用户输入,并向模型发送数据。
    MVC 分层有助于管理复杂的应用程序,因为您可以在一个时间内专门关注一个方面。例如,您可以在不依赖业务逻辑的情况下专注于视图设计。同时也让应用程序的测试更加容易。
    MVC 分层同时也简化了分组开发。不同的开发人员可同时开发视图、控制器逻辑和业务逻辑。
    Qt 项目架构之----MVC架构,QT专栏,qt,架构,mvc
    以 C++ 代码为例,设计英雄(Hero)对战 demo。Hero1 对 Hero2 进行攻击,Hero2 不断掉血,UI 同步更新。主要三个类,分别为 Hero(英雄数据类),HeroView(英雄UI类,如血条)和 HeroController(英雄控制器类,Hero 管理类)。
    Hero 类:
#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
}

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;

}

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());
}

main() 测试:

// 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;
}

控制台输出如下:文章来源地址https://www.toymoban.com/news/detail-578575.html

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 : 孟栋)

到了这里,关于Qt 项目架构之----MVC架构的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【Qt专栏】实现单例程序,禁止程序多开的几种方式

    目录 一,简要介绍 二,实现示例(Windows) 1.使用系统级别的互斥机制 2.通过共享内存(进程间通信-IPC) 3.使用命名互斥锁(不推荐) 4.使用文件锁 5.通过网络端口检测 前言 禁止程序多开,也称为“单实例应用程序”或“单例应用程序”,是指通过各种手段防止同一个应用

    2024年02月10日
    浏览(43)
  • FPGA高端项目:图像采集+GTX+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

    FPGA高端项目:图像采集+GTX+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持 没玩过图像处理、GT高速接口、UDP网络通信,都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做

    2024年02月05日
    浏览(50)
  • FPGA高端项目:图像采集+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

    FPGA高端项目:图像采集+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持 没玩过图像处理、GT高速接口、UDP网络通信,都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做

    2024年02月05日
    浏览(45)
  • FPGA高端项目:图像缩放+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

    FPGA高端项目:图像缩放+GTP+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持 没玩过图像处理、GT高速接口、UDP网络通信,都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做

    2024年02月05日
    浏览(45)
  • FPGA高端项目:图像缩放+GTX+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持

    FPGA高端项目:图像缩放+GTX+UDP架构,高速接口以太网视频传输,提供2套工程源码加QT上位机源码和技术支持 没玩过图像处理、GT高速接口、UDP网络通信,都不好意思说自己玩儿过FPGA,这是CSDN某大佬说过的一句话,鄙人深信不疑。。。GT资源是Xilinx系列FPGA的重要卖点,也是做

    2024年03月14日
    浏览(78)
  • Qt中QGraphicsView总体架构学习

    前段时间学习了下如何在QGraphicsView架构中绘制刻度尺,主要是与OnPainter中进行比较的,那么今天就来详细讲解下我对QGraphicsView框架的认知吧~ 最近一段时间想学习下,如果我有不正确的,欢迎留言探讨哟~ 使用过OnPainter绘制过图形的,QPainter绘制需要在绘制设备的paintEvent()事

    2024年02月02日
    浏览(27)
  • 嵌入式Qt 第一个Qt项目

    打开Qt Creator 界面选择 New Project或者选择菜单栏 【文件】-【新建文件或项目】菜单项   弹出New Project对话框,选择Qt Widgets Application 选择【Choose】按钮,弹出如下对话框 设置项目名称和路径,按照向导进行下一步   选择编译套件 向导会默认添加一个继承自QMainWindow的类,可

    2024年02月20日
    浏览(38)
  • 【Qt之模型视图】1. 模型和视图架构

    MVC(Model-View-Control)是一种源自 Smalltalk 的设计模式,通常用于构建用户界面。 MVC由三种类型的对象组成。模型是应用对象,用来表示数据;视图是模型的用户界面,用来显示数据;控制器定义了用户界面对用户输入的反应方式。在MVC之前,用户界面设计往往将这些对象混为

    2024年01月18日
    浏览(42)
  • QT圆形进度条(QT桌面项目光照强度检测)

    本篇文章我们讲解QT实现圆形进度条,并实现动态的效果。 实现QT圆形进度条其实是非常简单的,思路就是画两个圆弧。 这里大家就会觉得很奇怪了为什么画两个圆弧就能实现圆形进度条了呢?那么下面我们一个个圆弧来画看看效果。 代码: 效果: 我们首先画一个0到360°角

    2024年02月06日
    浏览(36)
  • Qt中QGraphicsView架构下实时鼠标绘制图形

    上一章节介绍了关于QGraphicsView的基础讲解,以及简单的类图创建,由上一章节中最后展示的动画效果来看,今年主要讲述如何在QGraphicsView架构下,实时拖动鼠标绘制图形! 今天主要以矩形为例,再来看一下展示效果吧! 想要实现鼠标拖拽绘图的效果,离不开鼠标的三大事件

    2024年01月22日
    浏览(37)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包