基于Qt,使用C++语言开发的一个简易计算器,包含了加减乘除四则运算。(仅适合初级学者学习)(纯代码实现)
废话不多说,直接上代码。
widget.h
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <QPushButton>
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QLineEdit>
#include <QString>
#include <QList>
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
public slots:
void btn_num();
void add();
void sub();
void mul();
void del();
void eql();
public:
QLineEdit *lineEdit1;
QPushButton *btn_0;
QPushButton *btn_1;
QPushButton *btn_2;
QPushButton *btn_3;
QPushButton *btn_4;
QPushButton *btn_5;
QPushButton *btn_6;
QPushButton *btn_7;
QPushButton *btn_8;
QPushButton *btn_9;
QPushButton *btn_add;
QPushButton *btn_sub;
QPushButton *btn_mul;
QPushButton *btn_del;
QPushButton *btn_eql;
int num1;
int num2;
int num3;
int num4;
};
#endif // WIDGET_H
widget.cpp
#include "widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
{
setFixedSize(400, 300);
lineEdit1 = new QLineEdit;
btn_0 = new QPushButton("0", this);
btn_1 = new QPushButton("1", this);
btn_2 = new QPushButton("2", this);
btn_3 = new QPushButton("3", this);
btn_4 = new QPushButton("4", this);
btn_5 = new QPushButton("5", this);
btn_6 = new QPushButton("6", this);
btn_7 = new QPushButton("7", this);
btn_8 = new QPushButton("8", this);
btn_9 = new QPushButton("9", this);
btn_add = new QPushButton("+", this);
btn_sub = new QPushButton("-", this);
btn_mul = new QPushButton("*", this);
btn_del = new QPushButton("/", this);
btn_eql = new QPushButton("=", this);
/*按键大小*/
lineEdit1->setFixedSize(400,100);
//btn_0->setFixedSize(100, 100);
//btn_1->setFixedSize(100, 100);
//btn_2->setFixedSize(100, 100);
//btn_3->setFixedSize(100, 100);
//btn_4->setFixedSize(100, 100);
//btn_5->setFixedSize(100, 100);
//btn_6->setFixedSize(100, 100);
//btn_7->setFixedSize(100, 100);
//btn_8->setFixedSize(100, 100);
//btn_9->setFixedSize(100, 100);
//btn_add->setFixedSize(100, 100);
//btn_sub->setFixedSize(100, 100);
//btn_mul->setFixedSize(100, 100);
//btn_del->setFixedSize(100, 100);
//btn_eql->setFixedSize(100, 100);
/*水平对齐*/
QHBoxLayout *hbox0 = new QHBoxLayout;
hbox0->addWidget(lineEdit1);
QHBoxLayout *hbox1 = new QHBoxLayout;
hbox1->addWidget(btn_7);
hbox1->addWidget(btn_8);
hbox1->addWidget(btn_9);
QHBoxLayout *hbox2 = new QHBoxLayout;
hbox2->addWidget(btn_4);
hbox2->addWidget(btn_5);
hbox2->addWidget(btn_6);
QHBoxLayout *hbox3 = new QHBoxLayout;
hbox3->addWidget(btn_3);
hbox3->addWidget(btn_2);
hbox3->addWidget(btn_1);
QHBoxLayout *hbox4 = new QHBoxLayout;
hbox4->addWidget(btn_add);
hbox4->addWidget(btn_0);
hbox4->addWidget(btn_sub);
QHBoxLayout *hbox5 = new QHBoxLayout;
hbox5->addWidget(btn_mul);
hbox5->addWidget(btn_del);
hbox5->addWidget(btn_eql);
/*垂直对齐*/
QVBoxLayout *vbox = new QVBoxLayout;
vbox->addLayout(hbox0);
vbox->addLayout(hbox1);
vbox->addLayout(hbox2);
vbox->addLayout(hbox3);
vbox->addLayout(hbox4);
vbox->addLayout(hbox5);
/* 将布局管理器添加到主窗体中 */
setLayout(vbox);
connect(btn_0, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_1, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_2, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_3, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_4, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_5, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_6, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_7, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_8, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_9, &QPushButton::clicked, this, &Widget::btn_num);
connect(btn_add, &QPushButton::clicked, this, &Widget::add);
connect(btn_sub, &QPushButton::clicked, this, &Widget::sub);
connect(btn_mul, &QPushButton::clicked, this, &Widget::mul);
connect(btn_del, &QPushButton::clicked, this, &Widget::del);
connect(btn_eql, &QPushButton::clicked, this, &Widget::eql);
}
int status = 0;
void Widget::btn_num()
{
QPushButton *btn = static_cast<QPushButton *> (sender());
num2 = btn->text().toInt();
QString str1 = btn->text();
QString str2 = lineEdit1->text();
if(str1 == "NULL"){
str2 = "0";
lineEdit1->setText(str2);
QString str3 = str2;
}else{
str2.append(str1);
lineEdit1->setText(str2);
}
}
void Widget::add()
{
QPushButton *btn = static_cast<QPushButton *> (sender());
num2 = btn->text().toInt();
QString str1 = btn->text();
QString str2 = lineEdit1->text();
status = 1;
str2.append(str1);
lineEdit1->setText(str2);
}
void Widget::sub()
{
QPushButton *btn = static_cast<QPushButton *> (sender());
num2 = btn->text().toInt();
QString str1 = btn->text();
QString str2 = lineEdit1->text();
status = 2;
str2.append(str1);
lineEdit1->setText(str2);
}
void Widget::mul()
{
QPushButton *btn = static_cast<QPushButton *> (sender());
num2 = btn->text().toInt();
QString str1 = btn->text();
QString str2 = lineEdit1->text();
status = 3;
str2.append(str1);
lineEdit1->setText(str2);
}
void Widget::del()
{
QPushButton *btn = static_cast<QPushButton *> (sender());
num2 = btn->text().toInt();
QString str1 = btn->text();
QString str2 = lineEdit1->text();
status = 4;
str2.append(str1);
lineEdit1->setText(str2);
}
void Widget::eql()
{
QPushButton *btn = static_cast<QPushButton *> (sender());
num2 = btn->text().toInt();
QString str1 = btn->text();
QString str2 = lineEdit1->text();
str2.append(str1);
QString str = lineEdit1->text();
QList<int> numbers;
switch(status){
case 0: ;break;
case 1:{
QStringList parts = str.split("+");
for(const QString &part:parts){
int num = part.toInt();
if(num != 0){
numbers.append(num);
}
}
num1 = numbers[0];
num2 = numbers[1];
num1 += num2;
lineEdit1->setText(QString::number(num1));}
break;
case 2:{
QStringList parts = str.split("-");
for(const QString &part:parts){
int num = part.toInt();
if(num != 0){
numbers.append(num);
}
}
num1 = numbers[0];
num2 = numbers[1];
num1 -= num2;
lineEdit1->setText(QString::number(num1));}
break;
case 3:{
QStringList parts = str.split("*");
for(const QString &part:parts){
int num = part.toInt();
if(num != 0){
numbers.append(num);
}
}
num1 = numbers[0];
num2 = numbers[1];
num3 = num1 * num2;
lineEdit1->setText(QString::number(num3));}
break;
case 4:{
QStringList parts = str.split("+");
for(const QString &part:parts){
int num = part.toInt();
if(num != 0){
numbers.append(num);
}
}
num1 = numbers[0];
num2 = numbers[1];
num4 = num1 / num2;
lineEdit1->setText(QString::number(num4));}
break;
}
}
Widget::~Widget()
{
}
main.cpp在创建时几乎没变。so~