C++ Qt5 科学计算器的实现代码

这篇博客展示了如何使用Qt5框架实现一个具备科学计算功能的计算器,包括历史记录和标准/科学模式切换。作者提供了界面设计截图及关键代码段,主要涉及到QMainWindow的使用和按键逻辑的设置。
摘要由CSDN通过智能技术生成

原创,转载请注明出处。
这里用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,
评论 13
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值