界面如下

上面的图片是通过设计界面实现的,水平太菜不会全用代码实现程序在我的qt5.3和qt5.6上都可以正常运行,源代码链接http://download.csdn.net/detail/qq_28637193/9618481

下面是头文件mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H#include <QMainWindow>
#include<QDialog>
#include<QComboBox>
namespace Ui {
class MainWindow;
}
enum ActionFlag
{NoAction,  //没有运算additonFlag,//加Subtraction ,//减MultiplicationFlag,//乘DivisonFlag,//除
};class MainWindow : public QMainWindow
{Q_OBJECTpublic:explicit MainWindow(QWidget *parent = 0);~MainWindow();void displayNumber();void beep();
private:Ui::MainWindow *ui;ActionFlag currentAction;//当前活动QString lastNumber;QString currentNumber;bool isEmpty;  //QDialog *selectDialog; //新的窗口QComboBox *selectCombo;public slots:
void clear();   //清空
void actionChanged();  //加减乘除活动
void inputNumber();   //输入数据
void negationClicked();  //正负转换
void percentageClicked();   //百分比
void decimalPointClicked();
void evaluationClicked();  //等号
void aboutApp();
void unitSelect();
void unitClac();};#endif // MAINWINDOW_H

下面是mainwindow.cpp代码

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include"QDebug"
#include"QMessageBox"
#include<QDialogButtonBox>
#include<QGroupBox>
#include<QtAlgorithms>
#include<qmath.h>
#include<QDialog>
#include<QIcon>
MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),currentAction(NoAction),isEmpty(true)
{ui->setupUi(this);//customizeWinsowHint 关闭默认窗口标题提示。setWindowFlags(Qt::CustomizeWindowHint|Qt::WindowCloseButtonHint|Qt::WindowMinimizeButtonHint);//清除信号connect(ui->pushB_clear,SIGNAL(clicked(bool)),this,SLOT(clear()));//正负号转换connect(ui->puB_negetion,SIGNAL(clicked(bool)),this,SLOT(negationClicked()));//百分号取余数connect(ui->pushB_percentage,SIGNAL(clicked(bool)),this,SLOT(percentageClicked()));//小数点connect(ui->puB_comma,SIGNAL(clicked()),this,SLOT(decimalPointClicked()));//等于号connect(ui->puB_equal,SIGNAL(clicked(bool)),this,SLOT(evaluationClicked()));//加connect(ui->puB_add,SIGNAL(clicked(bool)),this,SLOT(actionChanged()));//减connect(ui->puB_subtract,SIGNAL(clicked(bool)),this,SLOT(actionChanged()));//乘connect(ui->puB_multipty,SIGNAL(clicked(bool)),this,SLOT(actionChanged()));//除connect(ui->puB_division,SIGNAL(clicked(bool)),this,SLOT(actionChanged()));//0-9connect(ui->puB_0,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_1,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_2,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_3,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_4,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_5,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_6,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_7,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_8,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->puB_9,SIGNAL(clicked(bool)),this,SLOT(inputNumber()));connect(ui->action_qt,SIGNAL(triggered(bool)),qApp,SLOT(aboutQt()));connect(ui->actionauther,SIGNAL(triggererd(bool)),this,SLOT(aboutApp()));connect(ui->action_zhuanhuan,SIGNAL(triggered(bool)),this,SLOT(unitSelect()));}MainWindow::~MainWindow()
{delete ui;
}
void MainWindow::clear()
{if(ui->pushB_clear->text()=="AC"){currentAction=NoAction;currentNumber='0';lastNumber='0';isEmpty=true;ui->pushB_clear->setToolTip("clear");}else if(ui->pushB_clear->text()=="C"){currentNumber='0';isEmpty=true;ui->pushB_clear->setText("AC");ui->pushB_clear->setToolTip("clear");displayNumber();}}
void MainWindow::negationClicked()
{if(!isEmpty||(currentNumber.size()==0)){currentNumber="0";isEmpty=true;}else{if(currentNumber.at(0)=='-'){//remove删除指定位置指定长度currentNumber.remove(0,1);}else{currentNumber.push_front("-");}displayNumber();statusBar()->showMessage("符号转换",3000);}}void MainWindow::percentageClicked()
{if(!isEmpty){currentNumber="0.";isEmpty=true;}//indexof可以查找前面是否存在指定符号else if(currentNumber.indexOf(".")==-1){currentNumber.push_back(".");}displayNumber();statusBar()->showMessage("输入了小数点",3000);}
void MainWindow::decimalPointClicked()  //小数
{if(!isEmpty){currentNumber="0.";isEmpty=true;}//indexof可以查找前面是否存在指定符号else if(currentNumber.indexOf(".")==-1){currentNumber.push_back(".");}displayNumber();statusBar()->showMessage("输入了小数点",3000);
}
void MainWindow::evaluationClicked()
{QString jieguo;switch(currentAction){case NoAction:{statusBar()->showMessage("请选择一个运算",3000);return;break;}case additonFlag:{     //qDebug()<<lastNumber.toDouble()+currentNumber.toDouble()<<endl;currentNumber=QString::number(lastNumber.toDouble()+currentNumber.toDouble(),'g',6);qDebug()<<currentNumber<<endl;statusBar()->showMessage("计算完成",2000);break;}case Subtraction:{currentNumber=QString::number(lastNumber.toDouble()-currentNumber.toDouble(),'g',6);statusBar()->showMessage("计算完成",2000);break;}case MultiplicationFlag:{currentNumber=QString::number(lastNumber.toDouble()*currentNumber.toDouble(),'g',6);statusBar()->showMessage("计算完成",2000);break;}case DivisonFlag:{currentNumber=QString::number(lastNumber.toDouble()/currentNumber.toDouble(),'g',6);statusBar()->showMessage("计算完成",2000);break;}default:break;}currentAction=NoAction;ui->label->setText(currentNumber);statusBar()->showMessage("计算成功",3000);}void MainWindow::actionChanged(){//获取源对象,不存在对象时返回0QPushButton *currentButton=qobject_cast<QPushButton*>(this->sender());if(currentButton){isEmpty=false;if(currentButton==ui->puB_add){currentAction=additonFlag;//返回状态栏信息,如果状态兰不存在statusBar()->showMessage("输入了加号",3000);}else if(currentButton==ui->puB_subtract){ isEmpty=false;currentAction=Subtraction;statusBar()->showMessage("输入了减号",3000);}else if(currentButton==ui->puB_multipty){currentAction=MultiplicationFlag;statusBar()->showMessage("输入了乘号",3000);}else if(currentButton==ui->puB_division){currentAction=DivisonFlag;statusBar()->showMessage("输入了除号",3000);}else{currentAction=NoAction;}}
}void MainWindow::inputNumber(){QPushButton *currentButton=qobject_cast<QPushButton*>(this->sender());if(currentButton){int intput;if(currentButton==ui->puB_0)intput=0;if(currentButton==ui->puB_1)intput=1;if(currentButton==ui->puB_2)intput=2;if(currentButton==ui->puB_3)intput=3;if(currentButton==ui->puB_4)intput=4;if(currentButton==ui->puB_5)intput=5;if(currentButton==ui->puB_6)intput=6;if(currentButton==ui->puB_7)intput=7;if(currentButton==ui->puB_8)intput=8;if(currentButton==ui->puB_9)intput=9;ui->pushB_clear->setText("C");//如果当前不是空的,则清空显示的地方if(!isEmpty){lastNumber=currentNumber;currentNumber.clear();isEmpty=true;}if(currentNumber=="0"){currentNumber.clear();}switch(intput){case 0:{currentNumber.append("0");beep();statusBar()->showMessage("输入了0",3000);break;}case 1:{currentNumber.append("1");beep();statusBar()->showMessage("输入了1" ,3000);break;}case 2:{currentNumber.append("2");statusBar()->showMessage("输入了2",3000);break;}case 3:{currentNumber.append("3");statusBar()->showMessage("输入了4",3000);break;}case 4:{currentNumber.append("4");statusBar()->showMessage("输入了4",3000);break;}case 5:{currentNumber.append("5");statusBar()->showMessage("输入了5",3000);break;}case 6:{currentNumber.append("6");statusBar()->showMessage("输入了6",3000);break;}case 7:{currentNumber.append("7");statusBar()->showMessage("输入了7",3000);break;}case 8:{currentNumber.append("8");statusBar()->showMessage("输入了8",3000);break;}case 9:{currentNumber.append("9");statusBar()->showMessage("输入了9",3000);break;}default:break;}}displayNumber();}void MainWindow::displayNumber(){ui->label->setText(currentNumber);}void MainWindow::aboutApp(){QMessageBox::about(this,"关于计算器","此程序开发者车");}void MainWindow::unitSelect(){selectDialog=new QDialog(this);QDialogButtonBox *buttonBox;QGroupBox *groupBox;QGroupBox *groupBox_2;QLabel *displayLabel;selectDialog->resize(400,150);buttonBox=new QDialogButtonBox(selectDialog);buttonBox->setGeometry(30,100,341,32);qDebug()<<5<<endl;buttonBox->setStandardButtons(QDialogButtonBox::Cancel|QDialogButtonBox::Ok);groupBox =new QGroupBox(selectDialog);groupBox_2=new QGroupBox(selectDialog);groupBox->setGeometry(10,10,180,80);groupBox_2->setGeometry(210,10,180,80);groupBox->setTitle("要转换的数值");groupBox_2->setTitle("转换后的单位");displayLabel= new QLabel(ui->label->text(),selectDialog);  //显示要转换的数displayLabel->setGeometry(10,40,20,26);selectCombo=new QComboBox(groupBox_2);selectCombo->setGeometry(10,40,120,26);selectCombo->insertItem(0,"米->厘米");selectCombo->insertItem(1,"米->平方米");selectDialog->show();   //显示对话框connect(buttonBox,SIGNAL(rejected()),selectDialog,SLOT(deleteLater()));connect(buttonBox,SIGNAL(accepted()),this,SLOT(unitClac()));qDebug()<<7<<endl;}void MainWindow::unitClac(){switch(selectCombo->currentIndex()){case 0:currentNumber=QString::number(currentNumber.toDouble()*100);break;case 1:currentNumber=QString::number(pow(currentNumber.toDouble(),2));break;default:break;}selectDialog->deleteLater();displayNumber();}void MainWindow::beep(){QApplication::beep ();}

下面是main.cpp

#include "mainwindow.h"
#include <QApplication>
#include<QIcon>
int main(int argc, char *argv[])
{QApplication a(argc, argv);MainWindow w;w.show();return a.exec();
}

实现程序的图标我这里用的是rc的方法

RC_FILE += logo.rc
简单的分析就是把图片位置写到rc文件中然后加载rc文件,这个网上的教程很多大家可以搜素下

qt写的一个计算器程序相关推荐

  1. linux加法计算器程序,Linux下实现一个计算器程序

    (集体内容详见ChinaUnix社区) 现在要在Linux下实现一个计算器程序, 它有如下的要求: 1.  能识别英文数字:比如 three hundred and ninety two, 要能转换为 ...

  2. c语言计算器系统流程图,这是一个计算器程序 请各位高手帮我画一个流程图

    这是一个计算器程序 请各位高手帮我画一个流程图 #include #include #include char token; void error(void) { printf("stder ...

  3. 用switch编写一个计算机程序,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  4. c语言switch做一个计算器,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  5. 用switch写收水费的c语言程序,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  6. c语言不用switch做计算器,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  7. c语言switch编写计算器,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  8. C语言switch怎么算,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  9. c语言用switch计算器,超级新手,用switch写了个计算器程序,求指导

    该楼层疑似违规已被系统折叠 隐藏此楼查看此楼 我也写过一个....看样子大家都喜欢用 switch()来写计算机 ....百度排版是渣渣!!!!! # include intmain(void){ d ...

  10. 女朋友学高数,我花了 15 分钟用栈给她写了一个计算器 | 原力计划

    作者 | 天才程序YUAN 责编 | 夕颜 头图 | CSDN 下载自东方 IC 出品 | CSDN(ID:CSDNnews) 前记 女朋友说:"高数好难,看我最近挺辛苦的,你送我一个礼物给 ...

最新文章

  1. linux open系统调用的O_DIRECT标记
  2. 2021年值得关注的5个RPA趋势
  3. 转: java学习路线图
  4. STM32F4 HAL库开发 -- STM32CubeMX
  5. redistemplate怎么修改数据_如何使用RedisTemplate访问Redis数据结构?
  6. 这些面试中经常被问到的线程池问题,你都能回答的上来吗?
  7. 深入大数据安全分析(1):为什么需要大数据安全分析?
  8. [Linux] 常用Linux命令
  9. 【转】J2ME开发环境的建立
  10. 超定方程组的经典Gram-Schmidt正交化解法
  11. android自定义滤镜,让IjkPlayer支持插入自定义的GPU滤镜方法
  12. web前端性能优化方案
  13. mysql sql语句 参数化_参数化SQL语句
  14. Flutter Package 插件开发
  15. windows更新系统后,git报错unsafe repository xxx is owned by someone else
  16. 操作系统管理计算机资源
  17. golang代码实现chmod 777效果
  18. Python求一元二次方程的根
  19. java 验证手机号格式_java 校验手机号格式
  20. 鱼眼镜头opencv2校正

热门文章

  1. UNIGUI中如果获得Session情况
  2. OLAP引擎——Kylin介绍
  3. 阿里云解决方案架构师,讲述分布式架构云平台解决方案(附图文)
  4. Linux学习笔记5-linux中的磁盘
  5. Tensorflow学习笔记:使用线性回归进行简单分类
  6. Mybatis知识(1)
  7. winpcap的使用
  8. Metaweblog在Android上使用
  9. SharePoint 2013 创建web应用程序报错This page can’t be displayed
  10. ES6的开发环境搭建 1