基于Qt实现的简易计算器(C++)

本人刚学Qt时实现了一个计算器的简单应用程序,刚好最近的程序设计训练有计算器这道题目,于是便完善了一下,拿出来分享给大家, 说不定有和我选一样的同学看到。

这是运行后的应用程序,由于我的电脑是Win7系统,所以我就参考Win7自带的应用计算器设计开发。

本程序参考《设计模式》将用户界面与业务逻辑分离开,并通过业务接口关联。

设计原则:功能模块之间需要进行解耦。

核心思想:强内聚,弱耦合。

1、每个模块只实现单一的功能。

2、每个模块内部只为整体的单一功能而存在。

3、模块之间通过约定好的接口进行交互。

 

接口类:

#ifndef _ICALCULATOR_H_
#define _ICALCULATOR_H_

#include <QString>

class ICalculator
{
public:
    virtual bool expression(const QString& exp) = 0;          //输入表达式
    virtual QString result() = 0;                             //结果
};

#endif

UI界面:UI界面很多人都喜欢拖拽的方式生成,但是听老师说拖拽的方式最大的两个弊端就是代码的冗长和后期维护成本过高,而且这个界面也很简单,所有我自己写了(说实话本人不会拖拽生成界面,当初学的时候自动跳过了)。

#ifndef _QCALCULATORUI_H_
#define _QCALCULATORUI_H_

#include <QWidget>
#include <QLineEdit>
#include <QPushButton>

#include "ICalculator.h"

class QCalculatorUI : public QWidget
{
    Q_OBJECT
private:
    QLineEdit* m_edit;
    QPushButton* m_buttons[24];
    ICalculator* m_cal;

    QCalculatorUI();
    bool construct();
private slots:
    void onButtonClicked();
public:
    static QCalculatorUI* NewInstance();
    void show();
    void setCalculator(ICalculator* cal);
    ICalculator* getCalculator();
    ~QCalculatorUI();
};

#endif

上面的的代码如果有人问,为什么构造函数要声明成保护类,而不在public中,你可以去看我的另一篇博客C++->二阶构造

https://blog.csdn.net/weixin_41477765/article/details/89459831

#include "QCalculatorUI.h"
#include <qmath.h>
#include <QDebug>

QCalculatorUI::QCalculatorUI() : QWidget(NULL, Qt::WindowCloseButtonHint)
{
    m_cal = NULL;
}

bool QCalculatorUI::construct()
{
    bool ret = true;
    const char* btnText[24] =
    {
        "e^x", "7", "8", "9", "+", "(",
        "sin", "4", "5", "6", "-", ")",
        "cos", "1", "2", "3", "*", "<-",
        "tan", "0", ".", "=", "/", "C",
    };

    m_edit = new QLineEdit(this);

    if( m_edit != NULL )
    {
        m_edit->move(10, 10);
        m_edit->resize(290, 30);
        m_edit->setReadOnly(true);                 //将文本设置为只读模式
        m_edit->
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值