1-7-计算器实现思路
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
namespace Ui {
class Widget;
}
class Widget : public QWidget
{
Q_OBJECT
public:
explicit Widget(QWidget *parent = nullptr);
~Widget();
private:
Ui::Widget *ui;
QString a;//字符串
QStringList b;//字符串列表
public:
int8_t flag;
//处理单击求值(槽:专门处理信号的特殊函数)
private slots:
void doProcessClick_btn1(bool);
void doProcessClick_btn2(bool);
void doProcessClick_btn3(bool);
void doProcessClick_btn4(bool);
void doProcessClick_btn5(bool);
void doProcessClick_btn6(bool);
void doProcessClick_btn7(bool);
void doProcessClick_btn8(bool);
void doProcessClick_btn9(bool);
void doProcessClick_btn0(bool);
void doprocessClick_btn_add(bool);
void doprocessClick_btn_sub(bool);
void doprocessClick_btn_mul(bool);
void doprocessClick_btn_div(bool);
void doProcessClick_btn_equal(bool);
void doProcessClick_btn_c(bool);
void doProcessClick_btn_dot(bool);
void doProcessClick_btn_decrease(bool);
void doProcessClick_btn_insert(bool);
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent) :
QWidget(parent),
ui(new Ui::Widget)
{
ui->setupUi(this);
flag = 0;
a.clear();//清空a
b.clear();//清空b
/*绑定信号和槽*/
//数字
QObject::connect(ui->btn_1,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn1(bool)));
QObject::connect(ui->btn_2,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn2(bool)));
QObject::connect(ui->btn_3,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn3(bool)));
QObject::connect(ui->btn_4,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn4(bool)));
QObject::connect(ui->btn_5,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn5(bool)));
QObject::connect(ui->btn_6,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn6(bool)));
QObject::connect(ui->btn_7,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn7(bool)));
QObject::connect(ui->btn_8,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn8(bool)));
QObject::connect(ui->btn_9,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn9(bool)));
QObject::connect(ui->btn_0,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn0(bool)));
//+ - * / =
QObject::connect(ui->btn_add,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_add(bool)));
QObject::connect(ui->btn_sub,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_sub(bool)));
QObject::connect(ui->btn_mul,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_mul(bool)));
QObject::connect(ui->btn_division,SIGNAL(clicked(bool)),this,SLOT(doprocessClick_btn_div(bool)));
QObject::connect(ui->btn_equal,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_equal(bool)));
// c . <- +/-
QObject::connect(ui->btn_c,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_c(bool)));
QObject::connect(ui->btn_dot,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_dot(bool)));
QObject::connect(ui->btn_decrease,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_decrease(bool)));
QObject::connect(ui->btn_insert,SIGNAL(clicked(bool)),this,SLOT(doProcessClick_btn_insert(bool)));
}
Widget::~Widget()
{
delete ui;
}
void Widget::doProcessClick_btn1(bool){
a+="1";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn2(bool){
a+="2";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn3(bool){
a+="3";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn4(bool){
a+="4";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn5(bool){
a+="5";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn6(bool){
a+="6";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn7(bool){
a+="7";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn8(bool){
a+="8";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn9(bool){
a+="9";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn0(bool){
a+="0";//字符串追加
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn_dot(bool)
{
a+=".";//字符串追加
ui->l_show->setText(a);//显示a
}
//插入正负
void Widget::doProcessClick_btn_insert(bool){
if(flag){
if(a.left(1)=="+")
{
a.remove(0,1);//从0字符开始删除一个字符
a.insert(0,"-");//从0字符开始 插入‘-’
}
else{
a.insert(0,"-");//从0字符开始 插入‘-’
}
flag =~flag;
}
else {
if(a.left(1) == "-")
{
a.remove(0,1);//从0字符开始删除一个字符
a.insert(0,"+");//从0字符开始 插入‘-’
}
else {
a.insert(0,"+");//从[0] 插入‘-’
}
flag =~flag;
}
ui->l_show->setText(a);
}
//从倒数开始剔除一位
void Widget::doProcessClick_btn_decrease(bool)
{
a.chop(1);
ui->l_show->setText(a);
}
//清除
void Widget::doProcessClick_btn_c(bool){
a.clear();
b.clear();
ui->l_show->setText(a);
}
//加
void Widget::doprocessClick_btn_add(bool){
b.insert(0,a);//字符串a中插入第0位
a.clear();//清空
b.insert(1,"+");//字符串b,插入+
ui->l_show->setText(a);//显示a
}
//减
void Widget::doprocessClick_btn_sub(bool)
{
b.insert(0,a);//字符串a中插入第0位
a.clear();//清空
b.insert(1,"-");//字符串b,插入+
ui->l_show->setText(a);//显示a
}
//乘
void Widget::doprocessClick_btn_mul(bool){
b.insert(0,a);//字符串a中插入第0位
a.clear();//清空
b.insert(1,"*");//字符串b,插入*
ui->l_show->setText(a);//显示a
}
//除
void Widget::doprocessClick_btn_div(bool){
b.insert(0,a);//字符串a中插入第0位
a.clear();//清空
b.insert(1,"/");//字符串b,插入/
ui->l_show->setText(a);//显示a
}
void Widget::doProcessClick_btn_equal(bool){
if(b.count()==2){//数组有两个元素
b.insert(2,a);//数组[2]插入数值
if(b.at(1) == "+"){
double v3 = QString(b.at(0)).toDouble()+QString(b.at(2)).toDouble();
ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
}
else if (b.at(1) == "-") {
double v3 = QString(b.at(0)).toDouble()-QString(b.at(2)).toDouble();
ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
}
else if (b.at(1) == "*") {
double v3 = QString(b.at(0)).toDouble()*QString(b.at(2)).toDouble();
ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
}
else if (b.at(1) == "/") {
if(QString(b.at(2)).toInt()!=0){
double v3 = QString(b.at(0)).toDouble()/QString(b.at(2)).toDouble();
ui->l_show->setText(QString::number(v3));//强制转换QString类型然后显示
}
else {
ui->l_show->setText("error");
}
}
}
else {
a.clear();
b.clear();
ui->l_show->setText(a);
}
}