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

【Qt5】实现简易计算器 实现2个数进行四则运算的计算器。 阅读详情

本人刚学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->setAlignment(Qt::AlignRight);      //设置对齐方式-向右对其
    }
    else
    {
        ret = false;
    
Qt(C++)实现的简易计算器 软件工程的作业,让写一个计算器,为此花两天抽时间看了看Qt入门,然后就开搞了。 环境Qt 5.13.1,MinGw 7.3.0 32-bit,IDE:Qt Creator 4.10.0 新建Qt Widgets 应用,项目名称Calculator,基类选择GWidget,类名MyWidget。 1.首先是页面,直接拖拖拖,没用栅格,先垂直在水平布局了,改了一点参数,解决问题。 2.编... 阅读详情

相关推荐

QT实现计算器(C/C++)

digitClicked()槽函数用于处理数字按钮的点击事件,operatorClicked()槽函数用于处理运算符按钮的点击事件,equalsClicked()槽函数用于处理等号按钮的点击事件。在operatorClicked()槽函数中,我们获取被点击按钮的文本作为当前运算符,并将文本框中的内容转换为双精度浮点数,存储为操作数1。在上述代码中,我们添加了一个私有成员变量m_operand1,用于存储第一个操作数的值,以及一个私有成员变量m_currentOperator,用于存储当前运算符的值。

CyberNova的博客 381

Qt 实现简易计算器

QWidget 实现简易计算器。

qq_32863863的博客 808

QT简易计算器开发项目实战

Qt 是一个功能强大的跨平台 C++ 开发框架,广泛应用于图形用户界面(GUI)程序的开发。它不仅支持 Windows、Linux 和 macOS 等主流操作系统,还具备良好的可移植性和丰富的类库支持,极大地提升了开发效率。本章将从 Qt 框架的基本特性入手,介绍其在 GUI 开发中的优势,并引导读者搭建开发环境。随后,我们将以一个简易计算器项目为切入点,明确开发目标与功能需求,为后续章节中界面设计、信号槽机制、逻辑封装等内容打下坚实基础。通过本章学习,读者将初步掌握 Qt 项目的基本结构与开发流程。

weixin_42668301的博客 1031

基于QT(C++)实现房贷计算器

在按揭年数输入框的后面备注了不能超过 30 年,但一开始没有改进时,如果用户输入的年数大于 30 年,程序是仍然可以运行的,并且将年数赋值为此数,如图 3-3,这并不能起到提示的作用,因此我设计了警告对话框,并且在此时将利率框的显示改为“---”,这样将不能再次执行运算,可以起到更好的效果。为了更好实现人机友好型,在利率的处理上,对话框的形式设计成了只读,意味着在用户输入了按揭年数之后,点击相应的利率对话框利率将会自己显示,这对于用户将是更友好的设计。相反的,在 Qt 的代码实现上,我确实遇到了很多瓶颈。

神仙别闹的自留地 910

手把手教你用DLP4500投影仪玩转结构光3D扫描(附固件烧录与序列设置避坑指南)

本文详细解析了如何使用DLP4500投影仪搭建结构光3D扫描系统,涵盖硬件组装、固件烧录、图案生成与优化等全流程。重点解决了固件烧录失败、图像格式错误等常见问题,并提供了实用的避坑指南和进阶技巧,帮助读者快速掌握DLP4500在3D扫描中的应用。

weixin_42662293的博客 293

LSM6DS3TR-C IMU传感器入门:从MEMS原理到姿态解算实战

惯性测量单元(IMU)是现代智能设备实现运动感知的核心部件,其基础原理基于微机电系统(MEMS)技术。MEMS加速度计通过检测质量块在惯性力作用下的位移来测量线性加速度,而陀螺仪则利用科里奥利力效应感知角速度。这种技术使得微型化、低成本的6自由度运动测量成为可能,为机器人、无人机、可穿戴设备等提供了关键的空间姿态和运动状态信息。在实际工程中,开发者需要掌握I2C/SPI通信协议、传感器数据读取与校准,并通过互补滤波等算法融合加速度计和陀螺仪数据,实现稳定的姿态解算。LSM6DS3TR-C作为一款高性价比的6

weixin_28684655的博客 588

OSMDroid 切换地图不更新的问题

用OSMDroid加载Google地图的时候 需要有按钮切换不同图层的地图,如果发现调用了mMapView.setTileSource(ITileSource aTileSource)方法的时候发现地图View没有更新的话,可能是因为两个实例化TileSource对象其子类BitmapTileSourceBase这个类的aName成员变量值一样导致的地图在setTileSource出现不更新问题,...

godoge的博客 1034

MATLAB 基于深度学习的步态识别算法仿真

步态识别是一种通过分析人体行走方式来识别身份的技术。基于深度学习的步态识别算法利用卷积神经网络 (CNN) 提取步态特征,并通过分类器进行身份识别。基于深度学习的步态识别算法是实现身份识别的重要手段,具有广泛的应用前景。MATLAB 提供了丰富的工具和函数,可以方便地进行算法仿真和性能评估。

走向CTO的路上... 516

Sigrity Power SI Model Extraction模式如何提取电源网络的S参数和阻抗操作指导(一)

34. 默认格式是BNP format格式,会被Sigrity识别的S参数文件,在仿真完成后,默认会在文件夹中生成bnp和ckt(MCP)文件,无需这步操作。由于port设置的ref Z是50ohm,实际上电源网络的阻抗是没有这么高的,所以S参数回损曲线是基本上全反射的一个状态。Sigrity PowerSI是频域电磁场仿真工具,以下图为例介绍如果用它观测电源的网络的S参数以及阻抗的频域曲线.42. Spice格式的加载进来图标是橙色的,BNP格式的图标是灰色的。

weixin_54787054的博客 1268

导数与微分在 FPS 射击游戏中的实际应用:把“手感”算出来

摘要:射击游戏开发中,单线程适用于简单小游戏(如单机打靶),所有任务由主线程顺序处理,代码简单但效率较低;多线程则适合复杂场景(如多人在线3D大作),通过渲染、逻辑、网络、音效等线程分工协作,确保画面流畅、响应迅速和实时同步。选择依据取决于游戏复杂度、联网需求和性能要求,小型游戏用单线程,大型高要求项目必须采用多线程架构。(149字)

本博客聚焦游戏开发技巧、创业实战心得及大学热门课程干货。这里既有技术深度,也有思维广度,无论你是开发者、创业者还是高校学子,都能在这里找到适合自己的成长之路! 3269

【人工智能时代】-什么是MCP?本地如何开发MCP Server

MCP(Model Context Protocol)全称模型上下文协议,是由 Anthropic 推出的一种开放标准,旨在统一大型语言模型(LLM)与外部数据源和工具之间的通信协议。掌握更多的信息控制更多的工具在没有联网搜索之前,大模型的数据来源只有训练数据的时候以及推理我们告诉他的东西。所以后来的rag、知识库都是让AI掌握更多的信息,而MCP的出现是为了让大模型控制更多的工具,赋予更多能力。在本篇文章中,基于 Python 完成了一个简单的 MCP Server 的开发。

xiaoli8748的专栏 1966

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

上一篇: C++ ->二阶构造
下一篇: C语言字符串数与字符串数组那些你不知道的事
wudideLY
博客等级 码龄9年 7粉丝 22原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值