Qt 用户界面与业务逻辑的分离

1、界面与逻辑

  • 基本程序架构一般包括
    — 用户界面模块(UI)
    — 业务逻辑模块(Logic)

  • 用户界面与业务逻辑如何交互?
    — 每个模块应该只实现单一的功能
    — 模块之间通过约定好的接口进行交互

image.png

  • 用户界面使用这个接口,而业务逻辑实现这个接口

  • 基本设计原则
    — 模块之间仅通过接口进行关联
    — 模块之间的关系是单项依赖的

2、整体架构

image.png

此时我们有什么?
1、我们实现了计算器基本的界面
2、我们实现了计算器的基本计算算法

我们还需要做什么?
1、创建接口类(类里面都是纯虚函数)
2、创建封装类(QCalculator

ICalculator.h

#ifndef ICALCULATOR_H
#define ICALCULATOR_H

#include "QString"
class ICalculator
{
public:
    virtual bool expression(const QString& exp) = 0;
    virtual QString result() = 0;
};
#endif

界面类如何使用接口

1、定义一个接口类指针对象的成员变量(纯虚类不能直接定义对象):ICalculator* m_cal
2、定义两个相关的成员函数

void setCalculator(ICalculator* cal)
{
    m_cal = cal;
}
ICalculator* getCalculator()
{
	return m_cal;
}

3、实现槽函数最终的等式

else if(btnText == "=")
{
	if(m_cal != nullptr)
	{
		m_cal->expression(m_edit->text());
		m_edit->setText(m_cal->result);
	}
}

逻辑类如何实现接口

直接继承即可

class QCalculatorDec : public ICalculator
{
...
}

3、实现封装类

Calculator.h

#ifndef CALCULATOR_H
#define CALCULATOR_H

#include "QCalculatorUI.h"
#include "QCalculatorDec.h"

class Calculator
{
protected:
    QCalculatorUI* m_ui;
    QCalculatorDec m_dec;

    Calculator();
    bool construct();
public:
    static Calculator* NewInstance();
    void show();
    ~Calculator();
};

#endif // CALCULATOR_H

Calculator.cpp

#include "Calculator.h"

Calculator::Calculator()
{

}

bool Calculator::construct()
{
    m_ui = QCalculatorUI::NewInstance();
    if(m_ui != nullptr)
    {
        m_ui->setCalculator(&m_dec);		//最重要的一步
    }
    return (m_ui != nullptr);
}

Calculator* Calculator::NewInstance()
{
    Calculator* ret = new Calculator();
    if(!(ret && ret->construct()))
    {
        delete ret;
        ret = nullptr;
    }
    return ret;
}

void Calculator::show()
{
    m_ui->show();
}

Calculator::~Calculator()
{
    delete m_ui;
}


————————————————

版权声明:本文为CSDN博主「静下心来学Qt」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。

原文链接:https://blog.csdn.net/qq_35379003/article/details/103423485



本文出自勇哥的网站《少有人走的路》wwww.skcircle.com,转载请注明出处!讨论可扫码加群:

发表评论:

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

会员中心
搜索
«    2024年4月    »
1234567
891011121314
15161718192021
22232425262728
2930
网站分类
标签列表
最新留言
    热门文章 | 热评文章 | 随机文章
文章归档
友情链接
  • 订阅本站的 RSS 2.0 新闻聚合
  • 扫描加本站机器视觉QQ群,验证答案为:halcon勇哥的机器视觉
  • 点击查阅微信群二维码
  • 扫描加勇哥的非标自动化群,验证答案:C#/C++/VB勇哥的非标自动化群
  • 扫描加站长微信:站长微信:abc496103864
  • 扫描加站长QQ:
  • 扫描赞赏本站:
  • 留言板:

Powered By Z-BlogPHP 1.7.2

Copyright Your skcircle.com Rights Reserved.

鄂ICP备18008319号


站长QQ:496103864 微信:abc496103864