当前位置: 首页 > news >正文

6.9-QT模拟计算器

源码:

头文件: widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QMouseEvent>QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECTpublic:Widget(QWidget *parent = nullptr);~Widget();private slots:void on_btn_0_clicked();void on_btn_1_clicked();void on_btn_2_clicked();void on_btn_3_clicked();void on_btn_4_clicked();void on_btn_5_clicked();void on_btn_6_clicked();void on_btn_7_clicked();void on_btn_8_clicked();void on_btn_9_clicked();void on_btn_clear_clicked();void on_btn_dot_clicked();void on_btn_back_clicked();void on_btn_add_clicked();void on_btn_sub_clicked();void on_btn_div_clicked();void on_btn_mul_clicked();void on_btn_mod_clicked();void on_btn_equal_clicked();void setText(const QString& str);void changeLine(const QChar& c);private:Ui::Widget *ui;int flag = 0; //0-聚焦于lineEdit, 1-聚焦于lineEdit_2, 2-计算完毕.需要清空后重新计算QChar sign;
};
#endif // WIDGET_H

源文件:widget.cpp

#include "widget.h"
#include "ui_widget.h"Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);
}Widget::~Widget()
{delete ui;
}void Widget::setText(const QString& str) {if (flag == 0) {QString s = ui->lineEdit->text();ui->lineEdit->setText(s += str);} else if (flag == 1) {QString s = ui->lineEdit_2->text();ui->lineEdit_2->setText(s += str);}
}void Widget::on_btn_0_clicked()
{setText("0");
}void Widget::on_btn_1_clicked()
{setText("1");
}void Widget::on_btn_2_clicked()
{setText("2");
}void Widget::on_btn_3_clicked()
{setText("3");
}void Widget::on_btn_4_clicked()
{setText("4");
}void Widget::on_btn_5_clicked()
{setText("5");
}void Widget::on_btn_6_clicked()
{setText("6");
}void Widget::on_btn_7_clicked()
{setText("7");
}void Widget::on_btn_8_clicked()
{setText("8");
}void Widget::on_btn_9_clicked()
{setText("9");
}void Widget::on_btn_clear_clicked()
{ui->lineEdit->setText("");ui->lineEdit_2->setText("");ui->lineEdit_3->setText("");this->flag = 0;this->sign = '\0';
}void Widget::on_btn_dot_clicked()
{QString s;if (flag == 0) {s = ui->lineEdit->text();} else if (flag == 1){s = ui->lineEdit_2->text();}if (s == nullptr || s == " ") {s += "0.";if (flag == 0) {ui->lineEdit->setText(s);} else if (flag == 1){ui->lineEdit_2->setText(s);}}if (!s.contains(".")) {if (flag == 0) {ui->lineEdit->setText(s += '.');} else if (flag == 1){ui->lineEdit_2->setText(s += '.');}}
}void Widget::on_btn_back_clicked()
{QString s;if (flag == 0) {s = ui->lineEdit->text();ui->lineEdit->setText(s.removeLast());} else if (flag == 1){s = ui->lineEdit_2->text();ui->lineEdit_2->setText(s.removeLast());}
}void Widget::changeLine(const QChar &c)
{if (this->sign.isNull() && c == '-') {//1.若第一行为空,则第一个数为负数, 否则做为减号运算符QString s = ui->lineEdit->text();if (s == "") {ui->lineEdit->setText(s += c);} else {this->sign = c;this->flag = 1;}} else if (!this->sign.isNull() && c == '-') {//2.若第二行为空,则第二个数是负数,否则不做处理QString s = ui->lineEdit_2->text();if (s == "") {ui->lineEdit_2->setText(s += c);}} else if (this->sign.isNull()) { //若还没做过运算,且第一行非空,则转到第二行,若为空则不做处理QString s = ui->lineEdit->text();if (s != "") {this->sign = c;this->flag = 1;}}
}void Widget::on_btn_add_clicked()
{changeLine('+');
}void Widget::on_btn_sub_clicked()
{changeLine('-');
}void Widget::on_btn_div_clicked()
{changeLine('/');
}void Widget::on_btn_mul_clicked()
{changeLine('*');
}void Widget::on_btn_mod_clicked()
{changeLine('%');
}void Widget::on_btn_equal_clicked()
{QString s1 = ui->lineEdit->text().trimmed();QString s2 = ui->lineEdit_2->text().trimmed();double a, b, res;if (flag == 1 && s1 != "" && s2 !="") {//1.两行数都正常输入a = s1.toDouble();b = s2.toDouble();switch(sign.unicode()) {case '+':res = a + b;break;case '-':res = a - b;break;case '*':res = a * b;break;case '/':res = a / b;break;case '%':res = static_cast<int>(a) % static_cast<int>(b);break;default:throw std::runtime_error("未知运算符异常!");}ui->lineEdit_3->setText(QString::number(res));flag = 2;} else if (flag == 0 && s1 != "") {//2.只有第一行有输入,则直接取第一行为结果res = s1.toDouble();ui->lineEdit_3->setText(QString::number(res));} else if (flag == 0 && s1 == "") {//3.两行都为空输入0ui->lineEdit_3->setText(QString::number(0));}
}

测试计算器功能:

相关文章:

  • 封装技术生命周期 从CDIP到CSP到SiP先进封装
  • c++学习之路1-安装部署opencv环境c++版本用visual studio
  • LLMs之StructuredOutput:大模型结构化输出的简介、常用方案、前沿框架之详细攻略
  • SSRF由浅入深
  • 重启Eureka集群中的节点,对已经注册的服务有什么影响
  • HDMI 显示器热插拔对应显示应用启停测试
  • 实现弹窗随键盘上移居中
  • 基于stm32F10x 系列微控制器的智能电子琴(附完整项目源码、详细接线及讲解视频)
  • 协议转换利器,profinet转ethercat网关的两大派系,各有千秋
  • 【阅读笔记】MemOS: 大语言模型内存增强生成操作系统
  • 论文笔记:Urban Computing in the Era of Large Language Models
  • 基于51单片机的篮球计分器
  • 【第一章:人工智能基础】01.Python基础及常用工具包-(4)Python环境管理
  • REBT 分类任务中,`loss`(损失值)和 `logits`(原始预测分数)是什么
  • 用 Rust 重写 Linux 内核模块实战:迈向安全内核的新篇章
  • SAM2Long本地部署,视频分割处理,绿幕抠像,超长视频支持
  • Java-41 深入浅出 Spring - 声明式事务的支持 事务配置 XML模式 XML+注解模式
  • 深度解析云存储:概念、架构与应用实践
  • XMLGregorianCalendar跟Date、localDateTime以及String有什么区别
  • VisualXML全新升级 | 新增数据库编辑功能
  • 买了个服务器 怎么做网站/泰安seo推广
  • 网站设计制作的服务机构/看广告赚钱的平台
  • 各网站封面尺寸/百度推广账户怎么开
  • 美术馆网站建设要求/美容美发培训职业学校
  • 义乌缔造网络科技有限公司/seo关键词排名技术
  • 太原网站建设托管/网站开发平台有哪些