大概思路:此项目只进行两个数的运算,因此每次输入都要判断是符号前的数,还是符号后的数1,因此我要在大类test中定义两个字符串num1和num2。record即是输入记录,方便追加后续字符。布尔型add_num则是判断是否是符号前的数,如果是符号前(左)的数,则用num1来追加输出,反而num2追加输出。
建立一个窗口类test工程:
UI界面如下:
其中test.h如下:
#ifndef TEST_H
#define TEST_H
#include <QMainWindow>
#include <QString>
namespace Ui {
class test;
}
class test : public QMainWindow
{
Q_OBJECT
public:
explicit test(QWidget *parent = 0);
~test();
private slots:
void on_bt_1_clicked();
void on_bt_2_clicked();
void on_bt_3_clicked();
void on_add_clicked();
void on_del_clicked();
void on_clear_clicked();
void on_equal_clicked();
void on_subtract_clicked();
void on_multiply_clicked();
void on_divide_clicked();
void on_bt_4_clicked();
void on_bt_5_clicked();
void on_bt_6_clicked();
void on_bt_7_clicked();
void on_bt_8_clicked();
void on_bt_9_clicked();
private:
Ui::test *ui;
QString num1,num2,record,symbol;
bool add_num;
};
#endif // TEST_H
test.cpp如下:
#include "test.h"
#include "ui_test.h"
test::test(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::test)
{
ui->setupUi(this);
add_num = true;
record.clear();
}
test::~test()
{
delete ui;
}
void test::on_bt_1_clicked()
{
if(add_num)
{
num1.append("1");
ui->result_lb->setText(num1);
}
else
{
num2.append("1");
ui->result_lb->setText(num2);
}
}
void test::on_bt_2_clicked()
{
if(add_num)
{
num1.append("2");
ui->result_lb->setText(num1);
}
else
{
num2.append("2");
ui->result_lb->setText(num2);
}
}
void test::on_bt_3_clicked()
{
if(add_num)
{
num1.append("3");
ui->result_lb->setText(num1);
}
else
{
num2.append("3");
ui->result_lb->setText(num2);
}
}
void test::on_add_clicked()
{
record = ui->result_lb->text() + "+";
ui->progress_lb->setText(record);
add_num = false;
symbol = "+";
}
void test::on_del_clicked()
{
QString res = ui->result_lb->text(); // 获取表达式
/* 删除最后一个字符 */
res = res.left(res.length() - 1); // 去掉最后一个字符
ui->result_lb->setText(res); // 显示在文本行中
if(add_num)
num1 = res;
else
num2 = res;
}
void test::on_clear_clicked()
{
ui->result_lb->clear();
ui->progress_lb->clear();
num1.clear();
num2.clear();
add_num = true;
}
void test::on_equal_clicked()
{
record.append(ui->result_lb->text() + "=");
ui->progress_lb->setText(record);
float result;
if( symbol == "+")
result = num1.toFloat() + num2.toFloat();
if( symbol == "-")
result = num1.toFloat() - num2.toFloat();
if( symbol == "*")
result = num1.toFloat() * num2.toFloat();
if( symbol == "/")
result = num1.toFloat() / num2.toFloat();
ui->result_lb->setText(QString::number(result));
add_num = true;
num1.clear();
num2.clear();
}
void test::on_subtract_clicked()
{
record = ui->result_lb->text() + "-";
ui->progress_lb->setText(record);
add_num = false;
symbol = "-";
}
void test::on_multiply_clicked()
{
record = ui->result_lb->text() + "*";
ui->progress_lb->setText(record);
add_num = false;
symbol = "*";
}
void test::on_divide_clicked()
{
record = ui->result_lb->text() + "/";
ui->progress_lb->setText(record);
add_num = false;
symbol = "/";
}
void test::on_bt_4_clicked()
{
if(add_num)
{
num1.append("4");
ui->result_lb->setText(num1);
}
else
{
num2.append("4");
ui->result_lb->setText(num2);
}
}
void test::on_bt_5_clicked()
{
if(add_num)
{
num1.append("5");
ui->result_lb->setText(num1);
}
else
{
num2.append("5");
ui->result_lb->setText(num2);
}
}
void test::on_bt_6_clicked()
{
if(add_num)
{
num1.append("6");
ui->result_lb->setText(num1);
}
else
{
num2.append("6");
ui->result_lb->setText(num2);
}
}
void test::on_bt_7_clicked()
{
if(add_num)
{
num1.append("7");
ui->result_lb->setText(num1);
}
else
{
num2.append("7");
ui->result_lb->setText(num2);
}
}
void test::on_bt_8_clicked()
{
if(add_num)
{
num1.append("8");
ui->result_lb->setText(num1);
}
else
{
num2.append("8");
ui->result_lb->setText(num2);
}
}
void test::on_bt_9_clicked()
{
if(add_num)
{
num1.append("9");
ui->result_lb->setText(num1);
}
else
{
num2.append("9");
ui->result_lb->setText(num2);
}
}