共计 5248 个字符,预计需要花费 14 分钟才能阅读完成。
Qt 实现一个简略的计算器
作者:hackett
微信公众号:加班猿
一、UI 界面版
运行成果:输出 num1 和 num2 抉择 +-*/ 点击计算即可
UI 界面设计:
3 个 lineEdit(lineEditNum1,lineEditNum2,lineEditSum)
2 个 PushButton(buttonClear,ButtonCalc)
1 个 comboBox
1 个 label
布局:
3 个 lineEdit 和 1 个 comboBox、1 个 label 程度布局
2 个 PushButton 和一个弹簧程度布局
最初整体布局即可
main.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 <QDebug>
#include <QMessageBox>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{ui->setupUi(this);
}
MainWindow::~MainWindow()
{delete ui;}
void MainWindow::on_buttonCalc_clicked()
{double num1 = ui->lineEditNum1->text().toDouble();// 获取 num1 的值
double num2 = ui->lineEditNum2->text().toDouble();// 获取 num2 的值
uint8_t index = ui->comboBox->currentIndex(); // 获取下拉框的下标 0 +, 1 - ,2 *, 3 /
double result = 0.0;
switch (index) {
case 0:
result = num1 + num2;
break;
case 1:
result = num1 - num2;
break;
case 2:
result = num1 * num2;
break;
case 3:
if(num2 == 0)
{QMessageBox::about(this,"留神","除数不能为 0");
return;
}
result = num1 / num2;
break;
default:
break;
}
ui->lineEditSum->setText(QString::number(result));
}
void MainWindow::on_buttonClear_clicked()
{ui->lineEditNum1->clear();
ui->lineEditNum2->clear();
ui->lineEditSum->clear();}
mainwindow.h
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
namespace Ui {class MainWindow;}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private slots:
void on_buttonCalc_clicked();// 计算结果槽函数
void on_buttonClear_clicked();// 革除输入框槽函数
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
二、纯代码版
注:只能两个数独自加减乘除,不能间断运算,按‘=’从新开始两个数运算
main.cpp
#include "calc.h"
#include <QApplication>
int main(int argc, char *argv[])
{QApplication a(argc, argv);
Calc w;
w.show();
return a.exec();}
calc.cpp
#include "calc.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QLineEdit>
#include <QSizePolicy>
#include <QDebug>
Calc::Calc(QWidget *parent) :
QWidget(parent)
{
// 获取字体 QFont
QFont font = this->font();
font.setPixelSize(30);
this->setFont(font);
// 保留键盘值
QString keys="789-456*123/0.+=";
QVBoxLayout *vbox = new QVBoxLayout();
QSizePolicy qsPolicy(QSizePolicy::Expanding, QSizePolicy::Expanding);
for(int i=0; i<4; i++)
{QHBoxLayout *hbox = new QHBoxLayout();
for(int j=0; j<4; j++)
{buttons[i*4+j] = new QToolButton(this);
// 设置文本
buttons[i*4+j]->setText(keys.mid(i*4+j, 1));
hbox->addWidget(buttons[i*4+j]);
// 策略设置
buttons[i*4+j]->setSizePolicy(qsPolicy);
// 把按钮触发信号关联槽函数
connect(buttons[i*4+j], SIGNAL(clicked(bool)),this, SLOT(buttons_chick()));
}
// 把程度布局管理器增加到垂直布局管理器中
vbox->addLayout(hbox);
}
// 创立一个输入框
edit = new QLineEdit(this);
edit->setSizePolicy(qsPolicy);
edit->setMaximumHeight(60);
edit->setAlignment(Qt::AlignRight);
QVBoxLayout *allVbox = new QVBoxLayout(this);
allVbox->addWidget(edit);
allVbox->addLayout(vbox);
// 初始化
firstNumber.clear();
secondNumber.clear();
calcflag = 0;
}
Calc::~Calc()
{
}
void Calc::input_data(QString str)
{if(calcflag == 0)
{firstNumber.append(str);
edit->setText(firstNumber);
}else
{secondNumber.append(str);
edit->setText(secondNumber);
}
}
void Calc::buttons_chick()
{
// 通过信号发送者获取按钮对象
QToolButton *button = (QToolButton*)sender();
//qDebug()
QString str = button->text();
QString datastr = ".0123456789";
QStringList typestr;
typestr<<"+"<<"-"<<"*"<<"/";
if(datastr.indexOf(str) >= 0)// 获取按键值
{input_data(str); // 输出数据
}else if(typestr.indexOf(str)>=0)
{calcflag = typestr.indexOf(str)+1;// 获取运算符号 type
}else //=
{
double result = 0.0;
switch (calcflag) {
case 1:
result = firstNumber.toDouble()+secondNumber.toDouble();
break;
case 2:
result = firstNumber.toDouble()-secondNumber.toDouble();
break;
case 3:
result = firstNumber.toDouble()*secondNumber.toDouble();
break;
case 4:
result = firstNumber.toDouble()/secondNumber.toDouble();
break;
default:
break;
}
edit->setText(QString::number(result));
calcflag = 0;
firstNumber.clear();
secondNumber.clear();}
}
calc.h
#ifndef CALC_H
#define CALC_H
#include <QWidget>
#include <QToolButton>
#include <QLineEdit>
class Calc : public QWidget
{
Q_OBJECT
public:
explicit Calc(QWidget *parent = 0);
~Calc();
void input_data(QString str);
protected slots:
void buttons_chick();// 按键槽函数
private:
QToolButton *buttons[16]; // 按钮数组
QLineEdit *edit; // 输入框
QString firstNumber; // 记录输出第一个数值
QString secondNumber; // 记录输出第一个数值
int calcflag; //1-add,2-sub, 3-mul, 4-div
};
#endif // CALC_H
如果你感觉文章还不错,记得 ” 点赞关注 “
关注我的微信公众号【 加班猿 】能够获取更多内容
正文完