6.9-QT模拟计算器

news/2025/6/19 16:59:32

源码:

头文件: 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));}
}

测试计算器功能:


https://dhexx.cn/news/show-5537662.html

相关文章

Qt 窗口

第四章 Qt窗口 Qt 窗⼝ 是通过 QMainWindow类 来实现的。 QMainWindow 是⼀个为⽤⼾提供主窗⼝程序的类&#xff0c;继承⾃ QWidget 类&#xff0c;并且提供了⼀个预定义的布局。QMainWindow 包含 ⼀个菜单栏&#xff08;menu bar&#xff09;、多个⼯具栏(tool bars)、多个浮…

发立得信息发布系统房屋信息版(php+mysql)V1.0版

# 发立得信息发布系统房屋信息版(phpmysql) 一个轻量级的房屋信息发布平台&#xff0c;基于PHP和MySQL开发&#xff0c;支持用户发布房屋出售/出租信息&#xff0c;以及后台管理功能。 轻量级适合网站开发PHP方向入门者学习&#xff0c;首发版本&#xff0c;未经实际业务流程检…

免费好用的专业提词器有哪些~~~

免费好用的专业提词器来啦&#xff0c;根据文案智能调整滚动快慢&#xff0c;再也不紧张啦 用它&#xff0c;口播小白&#xff0c;也能变大神&#xff5e;&#xff5e;&#xff5e; 根据文本&#xff0c;智能可快可慢的提词器你见过吗&#xff5e;&#xff5e;&#xff5e; 领…

STM32嵌套向量中断控制器(NVIC)及外部中断使用案例分析

STM32嵌套向量中断控制器及外部中断使用案例分析 前言什么是中断中断和异常芯片上电之后从哪里开始执行&#xff1f;NVIC详解中断优先级分组中断优先级的设置配置示例中断向量表栈内存操作 STM32F4外部中断原理及使用案例外部中断原理中断事件 外部中断/事件线映射配置外部中断…

Python进程详解

进程是指一个程序的运行实例&#xff0c;它是一个独立的执行环境&#xff0c;拥有自己的内存空间、系统资源和执行状态。Python 中的进程可以通过标准库中的 multiprocessing 模块来创建和管理。 独立性&#xff1a;每个进程都有自己的独立内存空间&#xff0c;一个进程的变量…

【大厂机试题解法笔记】报文响应时间

题目 IGMP 协议中&#xff0c;有一个字段称作最大响应时间 (Max Response Time) &#xff0c;HOST收到查询报文&#xff0c;解折出 MaxResponseTime 字段后&#xff0c;需要在 (0&#xff0c;MaxResponseTime] 时间 (s) 内选取随机时间回应一个响应报文&#xff0c;如果在随机…

PostgreSQL 与 SQL 基础:为 Fast API 打下数据基础

在构建任何动态、数据驱动的Web API时&#xff0c;一个稳定高效的数据存储方案是不可或缺的。对于使用Python FastAPI的开发者来说&#xff0c;深入理解关系型数据库的工作原理、掌握SQL这门与数据库“对话”的语言&#xff0c;以及学会如何在Python中操作数据库&#xff0c;是…

删除远程已经不存在但本地仍然存在的Git分支

1. 获取远程分支列表 首先&#xff0c;确保你获取了远程仓库的最新分支信息&#xff1a; git fetch -p -p 参数会自动清理本地仓库中那些在远程已经被删除的分支的引用。 2. 查看本地分支与远程分支的对比 运行以下命令来查看哪些本地分支没有对应的远程分支&#xff1a; …

【使用LLM搭建系统】5 处理输入: 链式 Prompt Chaining Prompts

本章内容主要介绍了将复杂任务拆分为多个子任务&#xff08;链式Prompt&#xff09;的方法及其优势。尽管高级语言模型像GPT - 4擅长一次性遵循复杂指令&#xff0c;但有时拆分任务更可取。通过两个比喻来阐述原因&#xff1a; 一次烹饪复杂菜肴与分阶段烹饪&#xff1a;一次性…

【CANN全新升级】CANN创新MLAPO算子,DeepSeek模型推理效率倍增

MoE模型中的MLA架构 DeepSeek系列模型凭借其创新性的MLA&#xff08;Multi-Head Latent Attention&#xff09;架构&#xff0c;替代了传统的MHA&#xff08;Multi Head Attention&#xff09;&#xff0c;显著降低了推理时的KV Cache开销&#xff0c;大幅提升了推理效率&…