目录
3.代码模块
4.运行效果
建立工程
首先建立一个工程项目
编辑
点击下一步可修改名称和路径
在Base class下拉框选择QWidget,也可以选择其他
选择下一步,直到点击完成
建立好了以后,就在.h .cpp .ui 里面编辑,其中ui里面是拖拽控件
ui模块
首先拖拽一个widget,所有的按键均为pushButton且均在同一个widget上面,可进行栅格布局。输入和输出框为line Edit,不在widget上面。
做好布局以后,选中整体设置为垂直布局,修改按键名称方便后续使用。对象这一列的名称均可人为修改,修改为自己能辨认的
代码模块
//widget.h 此为头文件
#ifndef WIDGET_H
#define WIDGET_H
#include <QWidget>
#include <algorithm>
#include <math.h> //sqrt()函数需要的头文件
QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE
class Widget : public QWidget
{
Q_OBJECT
public:
Widget(QWidget *parent = nullptr);
~Widget();
private slots: //.cpp里面的槽函数要在这里声明
void on_pushButton_1_clicked();//按键1
void on_pushButton_2_clicked();//按键2
void on_pushButton_3_clicked();//按键3
void on_pushButton_4_clicked();//按键4
void on_pushButton_5_clicked();//按键5
void on_pushButton_6_clicked();//按键6
void on_pushButton_7_clicked();//按键7
void on_pushButton_8_clicked();//按键8
void on_pushButton_9_clicked();//按键9
void on_pushButton_clicked();//按键正负 注意:为实现该功能
void on_pushButton_0_clicked();//按键0
void on_pushButton_point_clicked();//按键.(小数点)
void on_pushButton_plus_clicked();//按键+(加)
void on_pushButton_cut_clicked();//按键-(减)
void on_pushButton_multiple_clicked();//按键*(乘)
void on_pushButton_divide_clicked();//按键/(除)
void on_pushButton_result_clicked();//按键=(等于)
void on_pushButton_Delete_clicked();//按键删除
void on_pushButton_percent_clicked();//按键百分号
void on_pushButton_CI_clicked();//按键CI
void on_pushButton_CO_clicked();//按键CO
void on_pushButton_1x_clicked();//按键1/x
void on_pushButton_x2_clicked();//按键x2
void on_pushButton_sqrt_clicked();//按键sqrt
private:
Ui::Widget *ui;
void on_lineEdit_intput();//输入显示
void on_lineEdit_output();//输出显示
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent)
: QWidget(parent)
, ui(new Ui::Widget)
{
ui->setupUi(this);
setWindowTitle("计算器");
//设置按钮文本大小,颜色等
this->setStyleSheet(QString("QPushButton{font:30px;}"
"QPushButton:hover{background:blue;color:white;}"
"QLineEdit{font:30px;}"));
// 关联信号与槽,让按钮和函数关联起来,实现按一下按钮屏幕实现功能
connect(ui->push_1, SIGNAL(clicked()), this, SLOT(on_pushButton_1_clicked()));
connect(ui->push_2, SIGNAL(clicked()), this, SLOT(on_pushButton_2_clicked()));
connect(ui->push_3, SIGNAL(clicked()), this, SLOT(on_pushButton_3_clicked()));
connect(ui->push_4, SIGNAL(clicked()), this, SLOT(on_pushButton_4_clicked()));
connect(ui->push_5, SIGNAL(clicked()), this, SLOT(on_pushButton_5_clicked()));
connect(ui->push_6, SIGNAL(clicked()), this, SLOT(on_pushButton_6_clicked()));
connect(ui->push_7, SIGNAL(clicked()), this, SLOT(on_pushButton_7_clicked()));
connect(ui->push_8, SIGNAL(clicked()), this, SLOT(on_pushButton_8_clicked()));
connect(ui->push_9, SIGNAL(clicked()), this, SLOT(on_pushButton_9_clicked()));
//正负、0、小数点
connect(ui->push, SIGNAL(clicked()), this, SLOT(on_pushButton_clicked()));
connect(ui->push_0, SIGNAL(clicked()), this, SLOT(on_pushButton_0_clicked()));
connect(ui->push_point, SIGNAL(clicked()), this, SLOT(on_pushButton_point_clicked()));
//加减乘除,等于,删除
connect(ui->push_plus, SIGNAL(clicked()), this, SLOT(on_pushButton_plus_clicked()));
connect(ui->push_cut, SIGNAL(clicked()), this, SLOT(on_pushButton_cut_clicked()));
connect(ui->push_multiple, SIGNAL(clicked()), this, SLOT(on_pushButton_multiple_clicked()));
connect(ui->push_divide, SIGNAL(clicked()), this, SLOT(on_pushButton_divide_clicked()));
connect(ui->push_result, SIGNAL(clicked()), this, SLOT(on_pushButton_result_clicked()));
connect(ui->push_Delete, SIGNAL(clicked()), this, SLOT(on_pushButton_Delete_clicked()));
//百分号,ci,co
connect(ui->push_percent, SIGNAL(clicked()), this, SLOT(on_pushButton_percent_clicked()));
connect(ui->push_CI, SIGNAL(clicked()), this, SLOT(on_pushButton_CI_clicked()));
connect(ui->push_CO, SIGNAL(clicked()), this, SLOT(on_pushButton_CO_clicked()));
//分数,平方,根号
connect(ui->push_1x, SIGNAL(clicked()), this, SLOT(on_pushButton_1x_clicked()));
connect(ui->push_x2, SIGNAL(clicked()), this, SLOT(on_pushButton_x2_clicked()));
connect(ui->push_sqrt, SIGNAL(clicked()), this, SLOT(on_pushButton_sqrt_clicked()));
}
Widget::~Widget()
{
delete ui;
}
//lineEdit_input为输入框,输入5+6这些简单计算
void Widget::on_pushButton_1_clicked()//按键1
{
ui->lineEdit_input->insert("1");
}
void Widget::on_pushButton_2_clicked()//按键2
{
ui->lineEdit_input->insert("2");
}
void Widget::on_pushButton_3_clicked()//按键3
{
ui->lineEdit_input->insert("3");
}
void Widget::on_pushButton_4_clicked()//按键4
{
ui->lineEdit_input->insert("4");
}
void Widget::on_pushButton_5_clicked()//按键5
{
ui->lineEdit_input->insert("5");
}
void Widget::on_pushButton_6_clicked()//按键6
{
ui->lineEdit_input->insert("6");
}
void Widget::on_pushButton_7_clicked()//按键7
{
ui->lineEdit_input->insert("7");
}
void Widget::on_pushButton_8_clicked()//按键8
{
ui->lineEdit_input->insert("8");
}
void Widget::on_pushButton_9_clicked()//按键9
{
ui->lineEdit_input->insert("9");
}
void Widget::on_pushButton_clicked()//按键正负 注意,暂未实现正负功能呢,可略过
{
ui->lineEdit_input->insert("error");
}
void Widget::on_pushButton_0_clicked()//按键0
{
ui->lineEdit_input->insert("0");
}
void Widget::on_pushButton_point_clicked()//按键.(小数点)
{
ui->lineEdit_input->insert(".");
}
void Widget::on_pushButton_plus_clicked()//按键+(加)
{
ui->lineEdit_input->insert("+");
}
void Widget::on_pushButton_cut_clicked()//按键-(减)
{
ui->lineEdit_input->insert("-");
}
void Widget::on_pushButton_multiple_clicked()//按键*(乘)
{
ui->lineEdit_input->insert("*");
}
void Widget::on_pushButton_divide_clicked()//按键÷(除)
{
ui->lineEdit_input->insert("÷");
}
void Widget::on_pushButton_1x_clicked()//按键1/x
{
ui->lineEdit_input->insert("^-1");
}
void Widget::on_pushButton_x2_clicked()//按键x2
{
ui->lineEdit_input->insert("^2");
}
void Widget::on_pushButton_sqrt_clicked()//按键sqrt
{
ui->lineEdit_input->insert("√");
}
//当按下等于,就开始计算算式
void Widget::on_pushButton_result_clicked()//按键=(等于)
{
QString value;
value = ui->lineEdit_input->text(); //读取输入框输入的算式
if(value.isEmpty())
return;
//如果算式里面有*,判断为乘法,b为乘法符号a前面的数字,c为乘法符号a后面出现的数字
if(value.indexOf("*")!=-1)
{ //indexOf() 方法可返回首次出现的位置。如果没有出现,则返回 -1。
double a;
a=value.indexOf("*");
double b;
b=value.leftRef(a).toDouble();
double c;
c=value.rightRef(value.size()-a-1).toDouble();
double d;
d=(b*c);
ui->lineEdit_output->setText(QString::number(d));
}
//lineEdit_output为输出框,setText代表把d的值放入指定位置,也就是输出框
if(value.indexOf("÷")!=-1)
{ //除法
double a;
a=value.indexOf("÷");
double b;
b=value.leftRef(a).toDouble();
double c;
c=value.rightRef(value.size()-a-1).toDouble();
double d;
d=(b/c);
ui->lineEdit_output->setText(QString::number(d));
}
if(value.indexOf("+")!=-1)
{
double a;
a=value.indexOf("+");
double b;
b=value.leftRef(a).toDouble();
double c;
c=value.rightRef(value.size()-a-1).toDouble();
double d;
d=(b+c);
ui->lineEdit_output->setText(QString::number(d));
}
if(value.indexOf("-")!=-1)
{
double a;
a=value.indexOf("-");
double b;
b=value.leftRef(a).toDouble();
double c;
c=value.rightRef(value.size()-a-1).toDouble();
double d;
d=(b-c);
ui->lineEdit_output->setText(QString::number(d));
}
if(value.indexOf("^-1")!=-1)
{ //倒数,1/x
double a;
a=value.indexOf("^-1");
double b;
b=value.leftRef(a).toDouble();
double c;
c=value.rightRef(value.size()-a-1).toDouble();
double d;
d=(1/b);
ui->lineEdit_output->setText(QString::number(d));
}
if(value.indexOf("^2")!=-1)
{ //平方
double a;
a=value.indexOf("^2");
double b;
b=value.leftRef(a).toDouble();
double d;
d= b*b;
ui->lineEdit_output->setText(QString::number(d));
}
if(value.indexOf("√")!=-1)
{ //平方根
double a;
a=value.indexOf("√");
double b;
b=value.leftRef(a).toDouble();
double d;
d=sqrt(b);
ui->lineEdit_output->setText(QString::number(d));
}
if(value.indexOf("%")!=-1)
{ //百分号,小数点前移两位
double a;
a=value.indexOf("%");
double b;
b=value.leftRef(a).toDouble();
double d;
d=b/100;
ui->lineEdit_output->setText(QString::number(d));
}
}
void Widget::on_pushButton_Delete_clicked()//按键删除,按一次删除一个
{
ui->lineEdit_input->setCursorPosition(ui->lineEdit_input->cursorPosition()-1);//光标位置
ui->lineEdit_input->del();
}
void Widget::on_pushButton_percent_clicked()//按键百分号
{
ui->lineEdit_input->insert("%");
}
void Widget::on_pushButton_CI_clicked()//按键CI
{
ui->lineEdit_input->clear(); //点击清空输入框
}
void Widget::on_pushButton_CO_clicked()//按键CO,清空输入输出框
{
ui->lineEdit_input->clear();
ui->lineEdit_output->clear();
}
运行效果