【QT】计算器-模拟实现

目录

准本工作

槽函数实现

数字按键槽函数

退格槽函数

运算符 按键 槽函数

等号槽函数

初始化及计算器页面布局

整体代码

widget.h

widget.cpp


准本工作

工程创建:

计算器模拟实现需求分析:

样式预览:

🎠主要功能:能够完成 加减乘除 运算。
🎠其他:
●文本框显示运算数以及运算结果。
●提供退格键,功能是清除已经输入到文本框中的数字。

由上述需求分析及预览效果图可知,我们需要显示的内容大致分为一下几个部分:
1.显示数据的文本框 和 删除数据的 “<” 按钮。
2.【0,9】 数字按钮显示。
3.【加 减 乘 除 等号】按钮显示。

●整体结构预览

槽函数实现

数字按键槽函数

函数介绍:
●QLineEdit是一个单行文本编辑控件。通过该控件可以 编辑单行文本,比如撤销、恢复、剪切、粘贴以及拖放等。

常用方法包括:

sender()是Qbject类的方法,如果在由信号激活的插槽中调用该函数,返回指向发送信号的对象的指针,否则返回0,该指针仅在从该对象的线程上下文调用此函数的槽执行期间有效。

代码实现:

void Widget::num_pressed()
{//提取按键信息QPushButton* xbt = static_cast<QPushButton*>( sender() );//显示数据再文本框中lcd->setText( lcd->text().append(xbt->text()) );
}

退格槽函数

代码实现:

void Widget::del_num()
{QString str = lcd->text();str.chop(1);//一次删除1个数据lcd->setText(str);
}

运算符 按键 槽函数


代码实现:

void Widget::get_op()
{//提取按键QPushButton* xbt = static_cast<QPushButton*>( sender() );//保存符号this->op = xbt->text().toStdString().c_str()[0];//提取文本框中的第一个运算数this->num1 = lcd->text().toInt();//是否把运算符显示再文本框中//lcd->setText( lcd->text().append(xbt->text()) );//文本框内容清除lcd->clear();
}

等号槽函数

函数介绍:
代码实现:

void Widget::calculate()
{//获取到第二个运算数num2 = lcd->text().toInt();//2. 计算int answer = 0;switch (op) {case '+':answer = num1 + num2;break;case '-':answer = num1 - num2;break;case '*':answer = num1 * num2;break;case '/':answer = num1 / num2;break;default:break;}//把运算结果显示lcd->setText(QString::number(answer));}

初始化及计算器页面布局

QHBoxLayout:水平布局,在水平方向上排列控件,即:左右排列。
QVBoxLayout:垂直布局,在垂直方向上排列控件,即:上下排列。

    QHBoxLayout* hbox = new QHBoxLayout;//水平布局hbox->addWidget(lcd);hbox->addWidget(chop);

QGridLayout 类将控件放置到网格中布局。

    QGridLayout* gbox = new QGridLayout;int i = 0;//0-8  三行三列for(int y=0; y<3; y++){for(int x=0; x<3; x++){gbox->addWidget(num[i++], y, x);}}//数字9 + - * / =gbox->addWidget(num[9],3,0);gbox->addWidget(add, 0, 3);gbox->addWidget(sub, 1, 3);gbox->addWidget(mul, 2, 3);gbox->addWidget(div, 3, 1);//等号占两个位置gbox->addWidget(calc, 3, 2, 1, 2);

整体代码

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QPushButton>
#include <QLineEdit>QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACEclass Widget : public QWidget
{Q_OBJECT
//槽函数
public slots://按键槽函数void num_pressed(void);//删除槽函数void del_num(void);//运算符按键槽void get_op(void);//计算槽函数void calculate();
public:Widget(QWidget *parent = nullptr);~Widget();
//控件声明
public:QLineEdit* lcd;//单行文本编辑控件QPushButton* num[10];//存储0-9的数组QPushButton* add;//加法按钮QPushButton* sub;//减法按钮QPushButton* mul;//乘法按钮QPushButton* div;//除法按钮QPushButton* calc;//等号按钮QPushButton* chop;//删除按钮char op;int num1;int num2;
private:Ui::Widget *ui;
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#include <QHBoxLayout>
#include <QVBoxLayout>
#include <QGridLayout>
#include <QDebug>
#include <ostream>Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);//1.控件初始化//文本框 && 删除按钮lcd = new QLineEdit;chop = new QPushButton("<");//数字按钮for(int i = 0; i<10;++i){num[i] = new QPushButton(QString::number(i));}//运算符按钮add = new QPushButton("+");sub = new QPushButton("-");mul = new QPushButton("*");div = new QPushButton("/");calc = new QPushButton("=");//2.布局QHBoxLayout* hbox = new QHBoxLayout;//水平布局hbox->addWidget(lcd);hbox->addWidget(chop);QGridLayout* gbox = new QGridLayout;int i = 0;//0-8  三行三列for(int y=0; y<3; y++){for(int x=0; x<3; x++){gbox->addWidget(num[i++], y, x);}}//数字9 + - * / =gbox->addWidget(num[9],3,0);gbox->addWidget(add, 0, 3);gbox->addWidget(sub, 1, 3);gbox->addWidget(mul, 2, 3);gbox->addWidget(div, 3, 1);//等号占两个位置gbox->addWidget(calc, 3, 2, 1, 2);QVBoxLayout *mainbox = new QVBoxLayout;mainbox->addLayout(hbox);mainbox->addLayout(gbox);setLayout(mainbox);//3.按钮点击 和 槽函数关联起来for(int i = 0;i<10;++i){connect(num[i],&QPushButton::clicked,this,&Widget::num_pressed);}//删除文本行内容connect(chop,&QPushButton::clicked,this,&Widget::del_num);//算数运算connect(calc,&QPushButton::clicked,this,&Widget::calculate);connect(add,&QPushButton::clicked,this,&Widget::get_op);connect(sub,&QPushButton::clicked,this,&Widget::get_op);connect(mul,&QPushButton::clicked,this,&Widget::get_op);connect(div,&QPushButton::clicked,this,&Widget::get_op);}//按键槽函数
void Widget::num_pressed()
{//提取按键信息QPushButton* xbt = static_cast<QPushButton*>( sender() );//显示数据再文本框中lcd->setText( lcd->text().append(xbt->text()) );
}
//删除数字槽函数
void Widget::del_num()
{QString str = lcd->text();qDebug() <<str;str.chop(1);//一次删除1个数据lcd->setText(str);
}
//获取运算符槽函数
void Widget::get_op()
{//提取按键QPushButton* xbt = static_cast<QPushButton*>( sender() );//保存符号this->op = xbt->text().toStdString().c_str()[0];//提取文本框中的第一个运算数this->num1 = lcd->text().toInt();//是否把运算符显示再文本框中//lcd->setText( lcd->text().append(xbt->text()) );//文本框内容清除lcd->clear();
}
//运算槽函数
void Widget::calculate()
{//获取到第二个运算数num2 = lcd->text().toInt();//2. 计算int answer = 0;switch (op) {case '+':answer = num1 + num2;break;case '-':answer = num1 - num2;break;case '*':answer = num1 * num2;break;case '/':answer = num1 / num2;break;default:break;}//把运算结果显示lcd->setText(QString::number(answer));}
Widget::~Widget()
{delete ui;
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/606910.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

uni-app如何生成骨架屏

骨架屏是页面的一个空白版本&#xff0c;通常会在页面完全渲染之前&#xff0c;通过一些灰色的区块大致勾勒出轮廓&#xff0c;待数据加载完成后&#xff0c;再替换成真实的内容。 参考效果 骨架屏作用是缓解用户等待时的焦虑情绪&#xff0c;属于用户体验优化方案。 生成骨…

视频剪辑方法:智能转码从视频到图片序列,高效转换攻略

在视频编辑和后期处理中&#xff0c;经常要将视频转换为图片序列&#xff0c;以便进行单独编辑或应用。下面一起来看云炫AI智剪如何批量智能转码的方法&#xff0c;高效地将视频转换为图片序列。 视频转为序列图片缩略图效果 视频转为序列图片的效果图&#xff0c;画面清晰&a…

基于WIFI指纹的室内定位算法matlab仿真

目录 1.算法运行效果图预览 2.算法运行软件版本 3.部分核心程序 4.算法理论概述 4.1WIFI指纹定位原理 4.2 指纹数据库建立 4.3定位 5.算法完整程序工程 1.算法运行效果图预览 2.算法运行软件版本 matlab2022a 3.部分核心程序 .....................................…

【SpringCloud Alibaba笔记】(4)Seata处理分布式事务

Seata 分布式事务问题 单机单库没这个问题&#xff0c;分布式之前从1: 1 -> 1:N ->N:N 分布式之后 单体应用被拆分成微服务应用&#xff0c;原来的三个模块被拆分成三个独立的应用分别使用三个独立的数据源&#xff0c;业务操作需要调用三个服务来完成。 此时每个服务…

网络调试 UDP1,开发板用动态地址-入门6

https://www.bilibili.com/video/BV1zx411d7eC?p11&vd_source109fb20ee1f39e5212cd7a443a0286c5 1, 开发板连接路由器 1.1&#xff0c;烧录无OS UDP例程 1.2&#xff0c;Mini USB连接电脑 1.3&#xff0c;开发板LAN接口连接路由器 2. Ping开发板与电脑之间通信* 2.1 根据…

浅谈归并排序:合并 K 个升序链表的归并解法

在面试中遇到了这道题&#xff1a;如何实现多个升序链表的合并。这是 LeetCode 上的一道原题&#xff0c;题目具体如下&#xff1a; 用归并实现合并 K 个升序链表 LeetCode 23. 合并K个升序链表 给你一个链表数组&#xff0c;每个链表都已经按升序排列。 请你将所有链表合并到…

【学习总结】地面路谱分析

本文仅用于记录自己的学习总结&#xff0c;包括个人理解。不保证内容严格正确。 0. 参考资料 [1] 国标GB/T 703-2005/ISO 8608:1995。[2] Bilibili 路面不平度统计特性[3] 网络参考文档. 网盘&#xff1a;https://pan.baidu.com/s/1ameuQwdOquCrk2V1PIS-Xw?pwdut9m 1. 路面…

Vue框架底层

一、前端框架的由来 1、服务端渲染 sequenceDiagram 浏览器->>服务器: https://www.bilibili.com/ Note right of 服务器: 组装页面(服务端渲染) 服务器->>-浏览器: 完整页面2、前后端分离 sequenceDiagram 浏览器->>服务器: https://www.bilibili.com/ 服务…

Tensorflow2.0笔记 - 基本数据类型,数据类型转换

【TensorFlow2.0】(1) tensor数据类型&#xff0c;类型转换_tensorflow tensor转int-CSDN博客文章浏览阅读1.5w次&#xff0c;点赞8次&#xff0c;收藏28次。各位同学好&#xff0c;今天和大家分享一下TensorFlow2.0中的tensor数据类型&#xff0c;以及各种类型之间的相互转换方…

Spring见解4 基于注解的AOP配置

5.基于注解的AOP配置 5.1.创建工程 5.1.1.pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi:schemaLocation…

余震强度预测能力升级,Nature 刊文认证基于神经网络的模型性能优于传统模型

作者&#xff1a;李宝珠 编辑&#xff1a;李玮栋、xixi&#xff0c;三羊 地震的发生涉及诸多变量&#xff0c;「预测」存在挑战&#xff0c;但余震发生次数及强度的预测已取得重大进展。 2023 年 12 月 18 日 23 时 59 分&#xff0c;甘肃省临夏州积石山县发生 6.2 级地震&…

企鹅目标检测数据集VOC格式400张

企鹅&#xff0c;一种可爱而独特的鸟类&#xff0c;以其圆滚滚的身体、黑白相间的羽毛和独特的行走方式而备受人们喜爱。 企鹅是鸟纲、企鹅科的动物&#xff0c;它们生活在南半球&#xff0c;特别是南极地区。企鹅的体型短而肥胖&#xff0c;有着流线型的身体和黑白相间的羽毛…

excel中相同类型的数据归到一起显示

1.选中所有数据 2.开始菜单-排序和筛选-自定义排序 3.选择分类关键字 此处&#xff0c;以属性为例 4.效果 归类后的数据&#xff1a;

Windows打印后打印机没有反应

Windows点打印后打印机没有任何反应 有时候点了打印&#xff0c;打印机却没有任何反应&#xff0c;别人却可以正常打印文件&#xff0c;问题可能出在自己电脑上。 可以试试以下几个方法&#xff0c;不好使不要骂我。 可能是本地打印服务问题 可以尝试在服务中将打印机服务重…

消息队列-RockMQ-批量收发实践

批量收发实战 发送消息是需要网络连接的如果我们单条发送吞吐量可能没有批量发送好。剖来那个发送可以减少网络IO开销&#xff0c;但是也不能一批次发送太多的数据&#xff0c;需要根据每条消息的大小和网络带宽来确定量的数目。 比如网络带宽为可以支持一次性发送8M的数据包&…

复试 || 就业day05(2024.01.08)项目一

文章目录 前言代码模拟梯度下降构建函数与导函数函数的可视化求这个方程的最小值&#xff08;直接求导&#xff09;求方程最小值&#xff08;不令方程导为0&#xff09;【梯度下降】eta0.1eta 0.2eta 50eta 0.01画出eta0.1时的梯度下降x的变化过程 总结 前言 &#x1f4ab;你…

Unity中URP下使用屏幕坐标采样深度图

文章目录 前言一、Unity使用了ComputeScreenPos函数得到屏幕坐标1、 我们来看一下这个函数干了什么2、我们看一下该函数实现该结果的意义 二、在Shader中使用&#xff08;法一&#xff09;1、在Varying结构体中2、在顶点着色器中3、在片元着色器中 三、在Shader中使用&#xff…

玩转Mysql 三(权限管理)

一路走来&#xff0c;所有遇到的人&#xff0c;帮助过我的、伤害过我的都是朋友&#xff0c;没有一个是敌人。 一、用户管理 1、登录MySQL服务器 语法示例&#xff1a; mysql –h hostname|hostIP –P port –u username –p DatabaseName –e "SQL语句" 详细命令…

MYSQL篇--索引高频面试题

mysql索引 1什么是索引&#xff1f; 索引说白了就是一种数据结构&#xff0c;可以协助快速查询数据&#xff0c;以及更新数据库表中的数据&#xff0c;更通俗的来说索引其实就是目录&#xff0c;通过对数据建立索引形成目录&#xff0c;便于去查询数据&#xff0c;而mysql索引…

DES算法(Python实现)

一、具体描述 基于计算机高级语言&#xff08;如C语言&#xff09;实现DES算法 二、名词术语与相关知识 DES算法 DES&#xff08;Data Encryption Standard&#xff09;是一种对称加密算法&#xff0c;被广泛应用于数据加密领域。它使用64位密钥和64位明文&#xff0c;通过…