diff --git a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/cal.cpp b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/cal.cpp index 715846b..eb071d3 100644 --- a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/cal.cpp +++ b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/cal.cpp @@ -59,9 +59,6 @@ QString inToPost(QString infix) { case '.': postfix.push_back(current); break; - case '%': - postfix.push_back(current); - break; case '(': stack.push(current); //左括号直接入栈 break; diff --git a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.cpp b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.cpp index ec7ffe9..e496324 100644 --- a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.cpp +++ b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.cpp @@ -2,10 +2,11 @@ #include "cal.h" #include "ui_mainwindow.h" #include +#include #include #include static QString displayText; - +static QString calcLog; MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) { ui->setupUi(this); @@ -52,13 +53,19 @@ void MainWindow::on_equalBtn_clicked() { if (isFinished) return; try { - result = compute(inToPost(ui->lineEdit->toPlainText().right( + QString s = inToPost(ui->lineEdit->toPlainText().right( ui->lineEdit->toPlainText().size() - - (ui->lineEdit->toPlainText().lastIndexOf("\n") + 1)))); + (ui->lineEdit->toPlainText().lastIndexOf("\n") + 1))); + std::cout << s.toStdString() << std::endl; + result = compute(s); } catch (...) { abortOperation(); } + calcLog += ui->lineEdit->toPlainText().right( + ui->lineEdit->toPlainText().size() - + (ui->lineEdit->toPlainText().lastIndexOf("\n") + 1)) + + '=' + QString::number(result) + '\n'; displayText += '=' + QString::number(result); ui->lineEdit->setPlainText(displayText); ui->lineEdit->verticalScrollBar()->setValue( @@ -75,7 +82,7 @@ void MainWindow::connectSlots() { ui->digitBtn8, ui->digitBtn9, ui->addBtn, ui->subtractionBtn, ui->mulBtn, ui->divisionBtn, ui->squareBtn, ui->pointBtn, ui->LBtn, ui->RBtn, ui->cBtn, ui->sBtn, - ui->perBtn}; + ui->sciBtn}; for (auto btn : digitBtns) connect(btn, &QPushButton::clicked, this, &MainWindow::normalClicked); } @@ -94,6 +101,12 @@ void MainWindow::on_actionClearHistroy_triggered() { ui->lineEdit->verticalScrollBar()->maximum()); } +void MainWindow::on_actionShow_History_H_triggered() { + ui->lineEdit->setPlainText(calcLog); + ui->lineEdit->verticalScrollBar()->setValue( + ui->lineEdit->verticalScrollBar()->maximum()); +} + void MainWindow::on_clearLine_clicked() { isFinished = false; displayText.chop(displayText.size() - displayText.lastIndexOf('\n') - 1); @@ -165,15 +178,21 @@ void MainWindow::keyPressEvent(QKeyEvent *event) { case Qt::Key_AsciiCircum: emit ui->squareBtn->clicked(); break; - case Qt::Key_BracketLeft: + case Qt::Key_ParenLeft: emit ui->LBtn->clicked(); break; - case Qt::Key_BracketRight: + case Qt::Key_ParenRight: emit ui->RBtn->clicked(); break; case Qt::Key_A: emit ui->ansBtn->clicked(); break; + case Qt::Key_S: + emit ui->sBtn->clicked(); + break; + case Qt::Key_C: + emit ui->cBtn->clicked(); + break; case Qt::Key_Equal: case Qt::Key_Enter: emit ui->equalBtn->clicked(); @@ -190,3 +209,25 @@ void MainWindow::keyPressEvent(QKeyEvent *event) { break; } } + +void MainWindow::on_actionc_triggered() { + if (isFinished) { + isFinished = false; + displayText += '\n'; + } + displayText += "299792458"; + ui->lineEdit->setPlainText(displayText); + ui->lineEdit->verticalScrollBar()->setValue( + ui->lineEdit->verticalScrollBar()->maximum()); +} + +void MainWindow::on_actionpi_triggered() { + if (isFinished) { + isFinished = false; + displayText += '\n'; + } + displayText += "3.1415926535"; + ui->lineEdit->setPlainText(displayText); + ui->lineEdit->verticalScrollBar()->setValue( + ui->lineEdit->verticalScrollBar()->maximum()); +} diff --git a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.h b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.h index b019e0f..f802715 100644 --- a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.h +++ b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.h @@ -39,5 +39,8 @@ private slots: void keyPressEvent(QKeyEvent *event); void on_ansBtn_clicked(); + void on_actionc_triggered(); + void on_actionpi_triggered(); + void on_actionShow_History_H_triggered(); }; #endif // MAINWINDOW_H diff --git a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.ui b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.ui index 3721112..3b77949 100644 --- a/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.ui +++ b/SoftwareDesign/Lab4/Lab4-1_Calculator4490_v6/mainwindow.ui @@ -6,12 +6,12 @@ 0 0 - 406 - 439 + 414 + 479 - Calculator_v3_4490 + Calculator_v6_4490 Qt::ToolButtonTextOnly @@ -168,13 +168,6 @@ - - - - % - - - @@ -189,6 +182,13 @@ + + + + = + + + @@ -196,10 +196,10 @@ - - + + - = + *10^ @@ -210,7 +210,7 @@ 0 0 - 406 + 414 30 @@ -220,8 +220,17 @@ + + + + + Constant + + + + @@ -234,12 +243,30 @@ - Clear Histroy(U) + Clear Buffer(U) Ctrl+U + + + c + + + + + pi + + + + + Show History(H) + + + Ctrl+H + +