Qt实现一个简单的计算器

作者:hackett

微信公众号:加班猿

一、UI界面版

运行效果:输入num1和num2选择+-*/点击计算即可

UI界面设计:

3个lineEdit(lineEditNum1,lineEditNum2,lineEditSum)

2个PushButton(buttonClear,ButtonCalc)

1个comboBox

1个label

布局:

3个lineEdit和1个comboBox、1个label水平布局

2个PushButton和一个弹簧水平布局

最后整体布局即可

main.cpp#include "mainwindow.h"

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

MainWindow w;

w.show();

return a.exec();

}

mainwindow.cpp#include "mainwindow.h"

#include "ui_mainwindow.h"

#include

#include

MainWindow::MainWindow(QWidget *parent) :

QMainWindow(parent),

ui(new Ui::MainWindow)

{

ui->setupUi(this);

}

MainWindow::~MainWindow()

{

delete ui;

}

void MainWindow::on_buttonCalc_clicked()

{

double num1 = ui->lineEditNum1->text().toDouble();//获取num1的值

double num2 = ui->lineEditNum2->text().toDouble();//获取num2的值

uint8_t index = ui->comboBox->currentIndex();   //获取下拉框的下标0 +, 1 - ,2 *, 3 /

double result = 0.0;

switch (index) {

case 0:

result = num1 + num2;

break;

case 1:

result = num1 - num2;

break;

case 2:

result = num1 * num2;

break;

case 3:

if(num2 == 0)

{

QMessageBox::about(this,"注意","除数不能为0");

return;

}

result = num1 / num2;

break;

default:

break;

}

ui->lineEditSum->setText(QString::number(result));

}

void MainWindow::on_buttonClear_clicked()

{

ui->lineEditNum1->clear();

ui->lineEditNum2->clear();

ui->lineEditSum->clear();

}

mainwindow.h#ifndef MAINWINDOW_H

#define MAINWINDOW_H

#include

namespace Ui {

class MainWindow;

}

class MainWindow : public QMainWindow

{

Q_OBJECT

public:

explicit MainWindow(QWidget *parent = 0);

~MainWindow();

private slots:

void on_buttonCalc_clicked();//计算结果槽函数

void on_buttonClear_clicked();//清除输入框槽函数

private:

Ui::MainWindow *ui;

};

#endif // MAINWINDOW_H

二、纯代码版

注:只能两个数单独加减乘除,不能连续运算,按‘ = ’重新开始两个数运算

main.cpp#include "calc.h"

#include

int main(int argc, char *argv[])

{

QApplication a(argc, argv);

Calc w;

w.show();

return a.exec();

}

calc.cpp#include "calc.h"

#include

#include

#include

#include

#include

Calc::Calc(QWidget *parent) :

QWidget(parent)

{

//获取字体QFont

QFont font = this->font();

font.setPixelSize(30);

this->setFont(font);

//保存键盘值

QString keys="789-456*123/0.+=";

QVBoxLayout *vbox = new QVBoxLayout();

QSizePolicy qsPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);

for(int i=0; i<4; i++)

{

QHBoxLayout *hbox = new QHBoxLayout();

for(int j=0; j<4; j++)

{

buttons[i*4+j] = new QToolButton(this);

//设置文本

buttons[i*4+j]->setText(keys.mid(i*4+j, 1));

hbox->addWidget(buttons[i*4+j]);

//策略设置

buttons[i*4+j]->setSizePolicy(qsPolicy);

//把按钮触发信号关联槽函数

connect(buttons[i*4+j], SIGNAL(clicked(bool)),this, SLOT(buttons_chick()));

}

//把水平布局管理器添加到垂直布局管理器中

vbox->addLayout(hbox);

}

//创建一个输入框

edit = new QLineEdit(this);

edit->setSizePolicy(qsPolicy);

edit->setMaximumHeight(60);

edit->setAlignment(Qt::AlignRight);

QVBoxLayout *allVbox = new QVBoxLayout(this);

allVbox->addWidget(edit);

allVbox->addLayout(vbox);

//初始化

firstNumber.clear();

secondNumber.clear();

calcflag = 0;

}

Calc::~Calc()

{

}

void Calc::input_data(QString str)

{

if(calcflag == 0)

{

firstNumber.append(str);

edit->setText(firstNumber);

}else

{

secondNumber.append(str);

edit->setText(secondNumber);

}

}

void Calc::buttons_chick()

{

//通过信号发送者获取按钮对象

QToolButton *button = (QToolButton*)sender();

//qDebug()

QString str = button->text();

QString datastr = ".0123456789";

QStringList typestr;

typestr<

if(datastr.indexOf(str) >= 0)//获取按键值

{

input_data(str);    //输入数据

}else if(typestr.indexOf(str)>=0)

{

calcflag = typestr.indexOf(str)+1;//获取运算符号type

}else //=

{

double result = 0.0;

switch (calcflag) {

case 1:

result = firstNumber.toDouble()+secondNumber.toDouble();

break;

case 2:

result = firstNumber.toDouble()-secondNumber.toDouble();

break;

case 3:

result = firstNumber.toDouble()*secondNumber.toDouble();

break;

case 4:

result = firstNumber.toDouble()/secondNumber.toDouble();

break;

default:

break;

}

edit->setText(QString::number(result));

calcflag = 0;

firstNumber.clear();

secondNumber.clear();

}

}

calc.h#ifndef CALC_H

#define CALC_H

#include

#include

#include

class Calc : public QWidget

{

Q_OBJECT

public:

explicit Calc(QWidget *parent = 0);

~Calc();

void input_data(QString str);

protected slots:

void buttons_chick();//按键槽函数

private:

QToolButton *buttons[16];   //按钮数组

QLineEdit *edit;            //输入框

QString firstNumber;        //记录输入第一个数值

QString secondNumber;       //记录输入第一个数值

int calcflag;               //1-add, 2-sub, 3-mul, 4-div

};

#endif // CALC_H

如果你觉得文章还不错,记得"点赞关注"

关注我的微信公众号【 加班猿 】可以获取更多内容

linux qt小型计算器,Qt实现一个简单的计算器相关推荐

  1. python语言设计简单计算器_Python 设计一个简单的计算器-Go语言中文社区

    设计目标 实现加减乘除及拓号优先级解析 用户输入'1 - 2 * ( (6-3 +(-5/5)*(9-2*3/3 + 7/3*7/4*12 +10 * 5/5 )) - (-4*3)/ (12-3*2 ...

  2. python123程序设计题说句心里话_用c++写一个简单的计算器程序

    // 050305.cpp : 定义控制台应用程序的入口点. // // 050304.cpp : 定义控制台应用程序的入口点. // //四则运算 #include "stdafx.h&q ...

  3. android实现计算器功能吗,利用Android实现一个简单的计算器功能

    利用Android实现一个简单的计算器功能 发布时间:2020-11-20 16:25:01 来源:亿速云 阅读:90 作者:Leah 今天就跟大家聊聊有关利用Android实现一个简单的计算器功能, ...

  4. vue设置一个简单的计算器

    vue设置一个简单的计算器 <div id="app"><input type="text" v-model="n1"&g ...

  5. Windows10 手机应用程序开发 - 3. 做一个简单的计算器界面

    2019独角兽企业重金招聘Python工程师标准>>> 目标:完成一个简单的计算器的界面,暂时不做点击处理,主要联系UI布局. 步骤: 1.创建一个空的windows phone 项 ...

  6. 正则表达式应用:实现一个简单的计算器

    实现一个简单的计算器,代码如下: 下面的函数用来检验数学表达式的合规性,当然此处只实现两个检验:(1)括号应该闭合 (2)不能出现字母 def check_expression(str):check_ ...

  7. python计算器教程,用Python程序制作一个简单的计算器

    用Python程序制作一个简单的计算器 在此示例中,您将学习创建一个简单的计算器,该计算器可以根据用户的输入进行加,减,乘或除. 要理解此示例,您应该了解以下Python编程主题: 通过函数创建简单计 ...

  8. JS实现一个简单的计算器

    使用JS完成一个简单的计算器功能.实现2个输入框中输入整数后,点击第三个输入框能给出2个整数的加减乘除.效果如上: 第一步: 创建构建运算函数count(). 第二步: 获取两个输入框中的值和获取选择 ...

  9. 用C语言实现一个简单的计算器代码

    #include <stdio.h> #include <math.h> #include <stdlib.h> //预处理指令 int main(void) {d ...

最新文章

  1. 任正非:华为5G是瞎猫碰死老鼠
  2. flash与php交互,flash与PHP的交互技巧
  3. 李开复:AlphaGo 若打败了世界冠军,意味着什么?
  4. [self Introduce]MY job pic
  5. 发生android.view.ViewRoot$CalledFromWrongThreadException异常的解决方案
  6. 如何使用 Barracuda 防火墙设置/保护 Azure 应用程序
  7. jax-ws和jax-rs_使用JAX-RS和Spring构建HATEOAS API
  8. 【转】C#开发奇技淫巧二:根据dll文件加载C++或者Delphi插件
  9. mapinfo图层导入奥维_(通信技能分享)怎样把谷歌地球上画的路线图导入到测试软件中!...
  10. 手环升级鸿蒙设备名单,定档6月2日!鸿蒙“首批”升级名单公布,共计11款华为机型!...
  11. JAVASCRIPT和数据结构,算法
  12. gitlab创建分支上传文件_环境搭建:gitLab平台的搭建和简单使用
  13. 约瑟夫环(C语言实现)
  14. TFS2010的生成功能
  15. windows 搭建kms服务器激活_OpenWrt搭建KMS服务器激活Windows和Office
  16. Unable to open OMF51 file...
  17. oracle可恢复的等待,【案例】Oracle RAC恢复报错RMAN-06004 RMAN-20003解决办法笔记
  18. 湘乡秸秆综合利用组合拳完善产业链 国稻种芯现代饲料规划
  19. hdmi接口有什么用_显示器有哪些接口?DP、HDMI、VGA、DVI有什么区别?
  20. 如何处理httpclient的ssl错误

热门文章

  1. 用神经网络分类原子和圆
  2. 二分类吸引子,排斥子,鞍点和反鞍点数据汇总
  3. 神经网络结构与输出值之间的关系
  4. 【控制】《多智能体系统的动力学分析与设计》徐光辉老师-第7章-不确定分数阶系统的多一致
  5. 【PC工具】PhotoScape简单好用绿色免费功能强大的照片编辑器(文章评论小程序测试)...
  6. 【PC工具】速度最快的的文件搜索工具:everything
  7. 采用IpIq控制方法和电流空间和电压空间的PWM方法控制
  8. 基于MATLAB的小波去噪
  9. GitHub 仓库按大小排序
  10. 互联网巨头们的广州“云”棋局