原创,转载请注明出处。
这里用Qt5实现了科学计算器的功能,添加了历史记录,以及标准计算器和科学计算器的转换,界面设置如下图:
在创建时使用基类使用QMainWindow,并创建界面文件。
将每个按键的名字改成我们可以识别的符号,例如数字键1改成digtalBtn1,如下图:
在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();
void myslot();
private slots:
void on_clearBtn_clicked();
void on_clearAllBtn_clicked();
void on_equalBtn_clicked();
void on_signBtn_clicked();
void on_pointBtn_clicked();
void digitClicked();
void operatorClicked();
void on_action_triggered();
void on_action_2_triggered();
void on_action_3_triggered();
void on_action_4_triggered();
void specialOperatorClicked();
void on_action_5_triggered();
private:
Ui::MainWindow *ui;
void abortOperation();
void connectSlots();//连接信号和槽
bool waitForOperand;//标记是否等待一个操作数
void setShortcutKeys();
QString inToPost(QString infix) throw(const char*);//转换为后缀表达式
double compute(QString s) throw(const char*);//计算后缀表达式的结果
QString error;
QString log;
};
#endif // MAINWINDOW_H
在main.cpp文件中保持创建初始状态不变。
在mainwindow.cpp的代码如下所示:
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include<QPushButton>
#include<QMessageBox>
#include<map>
#include<stack>
#include<cmath>
#include<QClipboard>
#include<QApplication>
#include<QDebug>
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
ui->lineEdit->setText("0");
waitForOperand=true;
connectSlots();
setShortcutKeys();
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::abortOperation()
{
ui->lineEdit->setText("0");
waitForOperand=true;
QMessageBox::warning(this,"运算错误","错误!");
}
void MainWindow::connectSlots()
{
QPushButton *digitaBtns[10]={
ui->digtalBtn0,ui->digtalBtn1,ui->digtalBtn2,ui->digtalBtn3,ui->digtalBtn4,ui->digtalBtn5,ui->digtalBtn6,ui->digtalBtn7,ui->digtalBtn8,ui->digtalBtn9
};
for(auto btn:digitaBtns)
connect(btn,&QPushButton::clicked,this,&MainWindow::digitClicked);
QPushButton *operatorBtns[8]={
ui->addBtn,ui->subtractionBtn,ui->mulBtn,ui->divBtn,ui->leftBracketBtn,ui->rightBracketBtn,ui->powBtn,ui->percrntBtn
};
for(auto btn:operatorBtns)
connect(btn,&QPushButton::clicked,this,&MainWindow::operatorClicked);
QPushButton *specialOperatorBtns[5]={
ui->sinBtn,ui->cosBtn,ui->tanBtn,ui->lnBtn,ui->lgBtn
};
for(auto btn:specialOperatorBtns)
connect(btn,&QPushButton::clicked,this,&MainWindow::specialOperatorClicked);
}
void MainWindow::setShortcutKeys()
{
Qt::Key key[27]={
Qt::Key_0,Qt::Key_1,Qt::Key_2,Qt::Key_3,Qt::Key_4,Qt::Key_5,Qt::Key_6,Qt::Key_7,Qt::Key_8,Qt::Key_9,Qt::Key_Plus,Qt::Key_Minus,Qt::Key_Asterisk,Qt::Key_Slash,