基于Qt5.4.1 c++简易计算器案例
**简易计算器 无连加连减功能 可以退格 和小数运算
功能可以分成下列模块:
- 界面-表达式输入框
- 界面-数字与运算符面板
- 界面 -运算过程 与栈中数据变化显示
- 界面-切换显示(结果和运算过程)
- 计算-输入的数字的数字类型是字符串类型 转换成数字
- 计算-使用switch判断计算符号
- 计算-退格即删除字符串最后一位
效果图如下:**
首先我们需要在.h文件中 定义很多的private变量
例如:输入1+2
num1中存储1 num2存储2
show_num=“1+2”显示出来
输入符号后 改变judge的值 使程序知道再输入的数字属于第二个数字
QString show_num;
QString num1,num2;//储存输入的第一个和第二个数值
bool judge;//判断第一个数是否输入完毕
char flag;//标记符号
如下是按键0被按下
如果judge为真 0加在字符串num1后
如果为假 0加在字符串num2后
改变show_num显示
void MainWindow::on_pushButton_0_clicked()
{
if(judge){
num1+="0";
}else num2+="0";
show_num=show_num+"0";
ui->label_show->setText(show_num);
}
**同理 如下是按键1被按下**
```cpp
void MainWindow::on_pushButton_1_clicked()
{
if(judge){
num1+="1";
}else num2+="1";
show_num=show_num+"1";
ui->label_show->setText(show_num);
}
**同理 小数点写法和数字一样 加在字符串后即可**
```cpp
void MainWindow::on_pushButton_clicked()
{
if(judge){
num1+=".";
}else num2+=".";
show_num=show_num+".";
ui->label_show->setText(show_num);
}
根据不同的符号 进行不同的运算 并且修改show_num的值(显示结果)
void MainWindow::on_pushButton_equal_clicked()
{
qDebug() << num1<< flag<< num2;
switch(flag){
case'+':show_num=show_num+"="+QString::number(num1.toDouble()+num2.toDouble());break;
case'-':show_num=show_num+"="+QString::number(num1.toDouble()-num2.toDouble());break;
case'*':show_num=show_num+"="+QString::number(num1.toDouble()*num2.toDouble());break;
case'/':show_num=show_num+"="+QString::number(num1.toDouble()/num2.toDouble());break;
default:break;
}
ui->label_show->setText(show_num);
}
```cpp
退格功能
首先需要清空显示 num1 num2赋值为空
judge赋值为真 表示将来输入的数字是第一个数
void MainWindow::on_pushButton_AC_clicked()
{
show_num=' ';
QString i;
num1=i;
num2=i;
judge=true;
ui->label_show->setText("");
}
window.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
#include <vector>
using namespace std;
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_pushButton_0_clicked();
void on_pushButton_1_clicked();
void on_pushButton_2_clicked();
void on_pushButton_3_clicked();
void on_pushButton_4_clicked();
void on_pushButton_5_clicked();
void on_pushButton_6_clicked();
void on_pushButton_7_clicked();
void on_pushButton_8_clicked();
void on_pushButton_9_clicked();
void on_pushButton_add_clicked();
void on_pushButton_del_clicked();
void on_pushButton_multiply_clicked();
void on_pushButton_division_clicked();
void on_pushButton_equal_clicked();
void on_pushButton_AC_clicked();
void on_pushButton_clicked();
private:
Ui::MainWindow *ui;
QString show_num;
QString num1,num2;//储存输入的第一个和第二个数值
bool judge;//判断第一个数是否输入完毕
char flag;//标记符号
};
#endif // MAINWINDOW_H
mian.cpp
#include "mainwindow.h"
#include <QApplication>
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 <cstdio>
#include <stdio.h>
#include <qdebug.h>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
show_num="";
}
MainWindow::~MainWindow()
{
delete ui;
judge=true;//判断的初值给true
}
void MainWindow::on_pushButton_0_clicked()
{
if(judge){
num1+="0";
}else num2+="0";
show_num=show_num+"0";
ui->label_show->setText(show_num);
}
void MainWindow::on_pushButton_1_clicked()
{
if(judge){
num1+="1";
}else num2+="1";
show_num=show_num+"1";
ui->label_show-