实现Windows自带的计算器
效果图
实现功能
基础计算:加、减、乘、除、小数点、正负、等于,科学计数法;
复杂计算:分数、平方、开根号、百分号;
清除操作:CE - 清除输入数字屏;C - 清除所有; back - 删除单个输入数字;
分屏显示:计算过程保存到小屏幕,输入数字在大屏;
键盘键入功能:调用QKeyEvent
自带的事件,实现从键盘键入,实现计算。
布局策略
全部运用布局策略,自适应窗口。
不足
只有运算区可用,图标没有实现功能,只用于布局。
//.h
#pragma once
#include <QtWidgets/QWidget>
#include "ui_kmainwindow.h"
#include<qstring.h>
#include<QKeyEvent>
class KMainWindow : public QWidget
{
Q_OBJECT
public:
KMainWindow(QWidget* parent = Q_NULLPTR);
private slots:
//一些槽函数
void btnPress(char digit);
void onBtnNum0Clicked();
void onBtnNum1Clicked();
void onBtnNum2Clicked();
void onBtnNum3Clicked();
void onBtnNum4Clicked();
void onBtnNum5Clicked();
void onBtnNum6Clicked();
void onBtnNum7Clicked();
void onBtnNum8Clicked();
void onBtnNum9Clicked();
void onBtnAddClicked(); //加
void onBtnSubtractClicked(); //减
void onBtnMultiplyClicked(); //乘
void onBtnDivideClicked(); //除
void onBtnEquClicked(); //等于
void onBtnPosNegClicked(); //正负
void onBtnPointClicked(); //小数点
void onBtnBackClicked(); //back回退一个数字
void onBtnCClicked(); //C 全部清除
void onBtnCEClicked(); //CE清除当前行
void onBtnHalfClicked(); //分数
void onBtnPercentClicked(); //百分号
void onBtnSquareClicked(); //平方
void onBtnSquareFeetClicked(); //开根号
void keyPressEvent(QKeyEvent* event);
private:
Ui::KMainWindowClass ui;
double m_num1;
double m_num2;
QString m_op;
bool m_clearDisplay;
};
//.cpp
#include "kmainwindow.h"
KMainWindow::KMainWindow(QWidget* parent)
: QWidget(parent)
{
ui.setupUi(this);
m_num1 = 0.0;
m_num2 = 0.0;
m_op = "";
m_clearDisplay = false;
(void)connect(ui.btnNum0, &QPushButton::clicked, this, &KMainWindow::onBtnNum0Clicked);
(void)connect(ui.btnNum1, &QPushButton::clicked, this, &KMainWindow::onBtnNum1Clicked);
(void)connect(ui.btnNum2, &QPushButton::clicked, this, &KMainWindow::onBtnNum2Clicked);
(void)connect(ui.btnNum3, &QPushButton::clicked, this, &KMainWindow::onBtnNum3Clicked);
(void)connect(ui.btnNum4, &QPushButton::clicked, this, &KMainWindow::onBtnNum4Clicked)