.pro文件
#------------------------------------------------- # # Project created by QtCreator 2024-01-04T11:02:23 # #------------------------------------------------- QT += core gui greaterThan(QT_MAJOR_VERSION, 4): QT += widgets TARGET = calculator TEMPLATE = app # The following define makes your compiler emit warnings if you use # any feature of Qt which has been marked as deprecated (the exact warnings # depend on your compiler). Please consult the documentation of the # deprecated API in order to know how to port your code away from it. DEFINES += QT_DEPRECATED_WARNINGS # You can also make your code fail to compile if you use deprecated APIs. # In order to do so, uncomment the following line. # You can also select to disable deprecated APIs only up to a certain version of Qt. #DEFINES += QT_DISABLE_DEPRECATED_BEFORE=0x060000 # disables all the APIs deprecated before Qt 6.0.0 SOURCES += \ main.cpp \ widget.cpp HEADERS += \ widget.h FORMS += \ widget.ui
widget.h
#ifndef WIDGET_H #define WIDGET_H #include <QWidget> #include<QStack> #include<string.h> namespace Ui { class Widget; } class Widget : public QWidget { Q_OBJECT public: explicit Widget(QWidget *parent = 0); ~Widget(); private slots: void on_oneButton_clicked(); void on_twoButton_clicked(); void on_threeButton_clicked(); void on_foutButton_clicked(); void on_fiveButton_clicked(); void on_sixButton_clicked(); void on_sevenButton_clicked(); void on_eightButton_clicked(); void on_nineButton_clicked(); void on_zeroButton_clicked(); void on_addButton_clicked(); void on_subButton_clicked(); void on_mulButton_clicked(); void on_divButton_clicked(); void on_leftButton_clicked(); void on_rightButton_clicked(); void on_clearButton_clicked(); void on_delButton_clicked(); void on_equalButton_clicked(); private: Ui::Widget *ui; QString expression; int Priority(char ch); }; #endif // WIDGET_H
main.cpp
#include "widget.h" #include <QApplication> int main(int argc, char *argv[]) { QApplication a(argc, argv); Widget w; w.show(); return a.exec(); }
widge.cpp
#include "widget.h" #include "ui_widget.h" Widget::Widget(QWidget *parent) : QWidget(parent), ui(new Ui::Widget) { ui->setupUi(this); this->setMaximumSize(200,320);//此处可以设置最大宽度和高度 this->setMinimumSize(200,320); this->setWindowTitle("计算器"); //给一个控件换字体 QFont f("仿宋",15); ui->mainLineEdit->setFont(f); //给控件换图片 QIcon con("D:\\QTProject\\QtOnline\\calculator\\回退.png"); //不使用资源来创建图标,打包时可能会导致图片无法显示找到。 ui->delButton->setIcon(con); //改变按钮背景色 ui->equalButton->setStyleSheet("background :yellow"); } Widget::~Widget() { delete ui; } void Widget::on_oneButton_clicked() { expression +="1"; ui->mainLineEdit->setText(expression); } void Widget::on_twoButton_clicked() { expression +="2"; ui->mainLineEdit->setText(expression); } void Widget::on_threeButton_clicked() { expression+="3"; ui->mainLineEdit->setText(expression); } void Widget::on_foutButton_clicked() { expression +="4"; ui->mainLineEdit->setText(expression); } void Widget::on_fiveButton_clicked() { expression +="5"; ui->mainLineEdit->setText(expression); } void Widget::on_sixButton_clicked() { expression +="6"; ui->mainLineEdit->setText(expression); } void Widget::on_sevenButton_clicked() { expression +="7"; ui->mainLineEdit->setText(expression); } void Widget::on_eightButton_clicked() { expression +="8"; ui->mainLineEdit->setText(expression); } void Widget::on_nineButton_clicked() { expression +="9"; ui->mainLineEdit->setText(expression); } void Widget::on_zeroButton_clicked() { expression +="0"; ui->mainLineEdit->setText(expression); } void Widget::on_addButton_clicked() { expression +="+"; ui->mainLineEdit->setText(expression); } void Widget::on_subButton_clicked() { expression +="-"; ui->mainLineEdit->setText(expression); } void Widget::on_mulButton_clicked() { expression +="*"; ui->mainLineEdit->setText(expression); } void Widget::on_divButton_clicked() { expression +="/"; ui->mainLineEdit->setText(expression); } void Widget::on_leftButton_clicked() { expression +="("; ui->mainLineEdit->setText(expression); } void Widget::on_rightButton_clicked() { expression +=")"; ui->mainLineEdit->setText(expression); } void Widget::on_clearButton_clicked() { expression.clear(); ui->mainLineEdit->clear(); } void Widget::on_delButton_clicked() { expression.chop(1); //删除最后一个字符串,chop函数。 ui->mainLineEdit->setText(expression); } void Widget::on_equalButton_clicked() { QStack<int> s_num, s_opt; char opt[128] = {0}; int i = 0, tmp = 0, num1, num2; //把QString转换成char * QByteArray ba; ba.append(expression); //把QString转换成QByteArray strcpy(opt, ba.data()); //data可以把QByteArray转换成const char * while (opt[i] != '\0' || s_opt.empty() != true) { if (opt[i] >= '0' && opt[i] <= '9') { tmp = tmp * 10 + opt[i] - '0'; i++; if (opt[i] < '0' || opt[i] > '9') { s_num.push(tmp); tmp = 0; } } else //操作符 { if (s_opt.empty() == true || Priority(opt[i]) > Priority(s_opt.top()) || (s_opt.top() == '(' && opt[i] != ')')) { s_opt.push(opt[i]); i++; continue; } if (s_opt.top() == '(' && opt[i] == ')') { s_opt.pop(); i++; continue; } if (Priority(opt[i]) <= Priority(s_opt.top()) || (opt[i] == ')' && s_opt.top() != '(') || (opt[i] == '\0' && s_opt.empty() != true)) { char ch = s_opt.top(); s_opt.pop(); switch(ch) { case '+': num1 = s_num.top(); s_num.pop(); num2 = s_num.top(); s_num.pop(); s_num.push(num1 + num2); break; case '-': num1 = s_num.top(); s_num.pop(); num2 = s_num.top(); s_num.pop(); s_num.push(num1 - num2); break; case '*': num1 = s_num.top(); s_num.pop(); num2 = s_num.top(); s_num.pop(); s_num.push(num1 * num2); break; case '/': num1 = s_num.top(); s_num.pop(); num2 = s_num.top(); s_num.pop(); s_num.push(num2 / num1); break; } } } } ui->mainLineEdit->setText(QString::number(s_num.top())); expression.clear(); } int Widget::Priority(char ch) { switch(ch) { case '(': return 3; case '*': case '/': return 2; case '+': case '-': return 1; default: return 0; } }