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

实现简易计算器 网格布局 QT环境 纯代码C++实现

问题:通过代码完成一个10以内加减法计算器。不需要自适应,界面固定360*350

"="按钮90*140,其它按钮90*70

参考样式

#define DEFULT_BUTTON_STYLE "\
QPushButton{\color:#000000;\border:1px solid #AAAAAA;\border-radius:0;\background-color:#FFFFFF;\
}\
QPushButton:pressed{\color:#FFFFFF;\background-color:#AAAAAA;\
}\
"

代码:

widget.h

#ifndef WIDGET_H
#define WIDGET_H#include <QWidget>
#include <QtWidgets>
namespace Ui {
class Widget;
}class Widget : public QWidget
{Q_OBJECTpublic:explicit Widget(QWidget *parent = nullptr);~Widget();private:Ui::Widget *ui;int num1; // 操作数1int num2; // 操作数2QString m_operator; // 运算符QString current_input1; // 操作数1QString current_input2; // 操作数2int result; // 结果int flag; // 是否已经输入运算符
};#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"
#define DEFULT_BUTTON_STYLE "\
QPushButton{\color:#000000;\border:1px solid #AAAAAA;\border-radius:0;\background-color:#FFFFFF;\
}\
QPushButton:pressed{\color:#FFFFFF;\background-color:#AAAAAA;\
}\
"Widget::Widget(QWidget *parent) :QWidget(parent),ui(new Ui::Widget)
{ui->setupUi(this);this->setWindowTitle("计算器");current_input1.clear(); // 清空字符串current_input2.clear();flag = 0; // flag置0QLabel *label = new QLabel; // 结果输出框labellabel->setAlignment(Qt::AlignRight|Qt::AlignHCenter|Qt::AlignVCenter); // 靠右居中对齐label->setText("0");label->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);QPushButton *button[10];for(int i = 0;i < 10;i++){button[i] = new QPushButton;button[i]->setText(QString::number(i));button[i]->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);button[i]->setStyleSheet("DEFULT_BUTTON_STYLE");connect(button[i],&QPushButton::clicked,this,[=](){if(flag ==0){current_input1 += QString::number(i); // 数字转换成字符串拼接label->setText(current_input1); // 显示到label上}else{current_input2 += QString::number(i); // 数字转换成字符串拼接QString temp = current_input1 + m_operator + current_input2; // 字符串拼接label->setText(temp); // 显示}});}QPushButton *add_button = new QPushButton;add_button->setText("+");add_button->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);connect(add_button,&QPushButton::clicked,this,[=](){m_operator = "+";flag = 1;QString temp = current_input1 + m_operator; // 字符串拼接label->setText(temp); // 显示});QPushButton *sub_button = new QPushButton;sub_button->setText("-");sub_button->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);connect(sub_button,&QPushButton::clicked,this,[=](){m_operator = "-";flag = 1;QString temp = current_input1 + m_operator;label->setText(temp); // 显示});QPushButton *equal_button = new QPushButton;equal_button->setText("=");equal_button->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);connect(equal_button,&QPushButton::clicked,this,[=](){num1 = current_input1.toInt();num2 = current_input2.toInt();if(m_operator == "+")result = num1 + num2;else if(m_operator == "-")result = num1 - num2;QString temp = QString("%1 %2 %3 = %4").arg(num1).arg(m_operator).arg(num2).arg(result);label->setText(temp); // 显示current_input1.clear();current_input2.clear();num1 = 0;num2 = 0;flag = 0;});QPushButton *clear_button = new QPushButton;clear_button->setText("C");clear_button->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);connect(clear_button,&QPushButton::clicked,this,[=](){current_input1.clear(); // 清空current_input2.clear();num1 = 0;num2 = 0;flag = 0;label->setText("0"); // 显示到label上});QPushButton *del_button = new QPushButton;del_button->setText("DEL");del_button->setSizePolicy(QSizePolicy::Preferred,QSizePolicy::Preferred);connect(del_button,&QPushButton::clicked,this,[=](){if(flag == 0){ // flag==0 说明目前处于第一个操作数current_input1.chop(1); // 去除尾端数字label->setText(current_input1);}else if(flag == 1 && current_input2.isEmpty()){ // 说明目前已经输入完运算符但还没有输入第二个操作数m_operator =""; // 设置为空flag = 0;label->setText(current_input1); // 显示}else{ // 说明目前处于第二个操作数current_input2.chop(1); // 去除尾端数字QString temp = current_input1 + m_operator + current_input2;label->setText(temp); // 显示}});QGridLayout *layout = new QGridLayout(this); // 网格布局layout->addWidget(label,0,0,1,4);layout->addWidget(clear_button,1,0,1,1);layout->addWidget(del_button,1,1,1,1);layout->addWidget(add_button,1,2,1,1);layout->addWidget(sub_button,1,3,1,1);layout->addWidget(button[7],2,0,1,1);layout->addWidget(button[8],2,1,1,1);layout->addWidget(button[9],2,2,1,1);layout->addWidget(button[0],2,3,1,1);layout->addWidget(button[4],3,0,1,1);layout->addWidget(button[5],3,1,1,1);layout->addWidget(button[6],3,2,1,1);layout->addWidget(button[1],4,0,1,1);layout->addWidget(button[2],4,1,1,1);layout->addWidget(button[3],4,2,1,1);layout->addWidget(equal_button,3,3,2,1);layout->setMargin(0); // 边界layout->setSpacing(0); // 各部件之间间距
}Widget::~Widget()
{delete ui;
}

main.cpp

#include "widget.h"
#include <QApplication>int main(int argc, char *argv[])
{QApplication a(argc, argv);Widget w;w.show();return a.exec();
}

输出:

初始化界面:

示例:

相关文章:

实现简易计算器 网格布局 QT环境 纯代码C++实现

问题&#xff1a;通过代码完成一个10以内加减法计算器。不需要自适应&#xff0c;界面固定360*350。 ""按钮90*140&#xff0c;其它按钮90*70。 参考样式 #define DEFULT_BUTTON_STYLE "\ QPushButton{\color:#000000;\border:1px solid #AAAAAA;\border-radi…...

后端开发详细学习框架与路线

&#x1f680; 作者 &#xff1a;“码上有前” &#x1f680; 文章简介 &#xff1a;后端开发 &#x1f680; 欢迎小伙伴们 点赞&#x1f44d;、收藏⭐、留言&#x1f4ac; 为帮助你合理安排时间&#xff0c;以下是结合上述学习内容的阶段划分与时间分配建议。时间安排灵活&a…...

2.langchain中的prompt模板 (FewShotPromptTemplate)

本教程将介绍如何使用 LangChain 库中的 PromptTemplate 和 FewShotPromptTemplate 来构建和运行提示&#xff08;prompt&#xff09;&#xff0c;并通过示例数据展示其应用。 安装依赖 首先&#xff0c;确保你已经安装了 langchain 和相关依赖&#xff1a; pip install lan…...

FairGuard游戏加固实机演示

此前&#xff0c;FairGuard对市面上部分游戏遭遇破解的案例进行了详细分析&#xff0c;破解者会采用静态分析与动态调试相结合的手段&#xff0c;逆向分析出代码逻辑并对其进行篡改&#xff0c;实现作弊功能&#xff0c;甚至是对游戏资源文件进行篡改&#xff0c;从而制售外挂。…...

Spark使用过程中的 15 个常见问题、详细解决方案

目录 问题 1&#xff1a;Spark 作业超时问题描述解决方案Python 实现 问题 2&#xff1a;内存溢出问题描述解决方案Python 实现 问题 3&#xff1a;Shuffle 性能问题问题描述解决方案Python 实现 问题 4&#xff1a;Spark 作业调度不均问题描述解决方案Python 实现 问题 5&…...

算法【最长递增子序列问题与扩展】

本文讲解最长递增子序列以及最长不下降子序列的最优解&#xff0c;以及一些扩展题目。本文中讲述的是最优解&#xff0c;时间复杂度是O(n*logn)&#xff0c;空间复杂度O(n)&#xff0c;好实现、理解难度不大。这个问题也可以用线段树来求解&#xff0c;时间和空间复杂度和本节讲…...

k8s篇之flannel网络模型详解

在 Kubernetes (K8s) 中,Flannel 是一种常用的网络插件,用于实现容器之间的网络通信。Flannel 提供了一种覆盖网络(Overlay Network)模型,使得容器可以跨多个主机进行通信。 以下是 Flannel 在 Kubernetes 中的详细工作原理和覆盖网络模型的详解: 1.Flannel 简介 Flann…...

windows 和 linux检查操作系统基本信息

windows检查操作系统基本信息 systeminfolinux检查操作系统基本信息 获取系统位数 getconf LONG_BIT查询操作系统release信息 lsb_release -a查询系统信息 cat /etc/issue查询系统名称 uname -a...

Oracle OCP认证考试考点详解082系列22

题记&#xff1a; 本系列主要讲解Oracle OCP认证考试考点&#xff08;题目&#xff09;&#xff0c;适用于19C/21C,跟着学OCP考试必过。 105. 第105题&#xff1a; 题目 解析及答案&#xff1a; 题目翻译&#xff1a; 关于Oracle数据库中的事务请选择两个正确的陈述&#xf…...

线性回归 - 最小二乘法

线性回归 一 简单的线性回归应用 webrtc中的音视频同步。Sender Report数据包 NTP Timestamp&#xff08;网络时间协议时间戳&#xff09;&#xff1a;这是一个64位的时间戳&#xff0c;记录着发送SR的NTP时间戳&#xff0c;用于同步不同源之间的时间。RTP Timestamp&#xff1…...

Linux - 线程基础

文章目录 1.什么是线程2.线程vs进程3.线程调度4.线程控制4.1 POSIX线程库4.2创建线程4.3线程终止4.4线程等待4.5线程分离 5、线程封装 1.什么是线程 在Linux操作系统中&#xff0c;线程是进程内部的一个执行流。在Linux操作系统下&#xff0c;执行流统称为轻量级进程&#xff0…...

网络爬虫——分布式爬虫架构

分布式爬虫在现代大数据采集中是不可或缺的一部分。随着互联网信息量的爆炸性增长&#xff0c;单机爬虫在性能、效率和稳定性上都面临巨大的挑战。分布式爬虫通过任务分发、多节点协作以及结果整合&#xff0c;成为解决大规模数据抓取任务的核心手段。 本节将从 Scrapy 框架的…...

RT_Thread内核源码分析(三)——线程

目录 1. 线程结构 2. 线程创建 2.1 静态线程创建 2.2 动态线程创建 2.3 源码分析 2.4 线程内存结构 3. 线程状态 3.1 线程状态分类 3.2 就绪状态和运行态 3.3 阻塞/挂起状态 3.3.1 阻塞工况 3.4 关闭状态 3.4.1 线程关闭接口 3.4.2 静态线程关闭 3.4.3 动态线程关…...

正排索引和倒排索引

一、简介 正排索引&#xff1a;一个未经处理的数据库中&#xff0c;一般是以文档ID作为索引&#xff0c;以文档内容作为记录。 倒排索引&#xff1a;Inverted index&#xff0c;指的是将单词或记录作为索引&#xff0c;将文档ID作为记录&#xff0c;这样便可以方便地通过单词或…...

丹摩 | 重返丹摩(上)

目录 一.登录平台 二. 数据管理与预处理 1.数据清洗 2.数据格式转换 3.特征工程 二.数据可视化 1.快速可视化 2.数据洞察 3.自定义视图 三.技术支持与帮助 1.技术支持 (1). 帮助文档 (2). 用户社区 2.客服支持 (1). 在线客服 (2). 反馈与建议 总结 一.登录平台…...

Frontend - 防止多次请求,避免重复请求

目录 一、避免重复执行的多种情况 &#xff08;一&#xff09;根据用途 &#xff08;二&#xff09;根据用户操作 二、具体实现 &#xff08;一&#xff09;“Ajax ”结合disabled (防止多次请求)&#xff0c;避免多次点击重复请求 1. 适用场景 2. 解决办法 3. 示例 &…...

RHCE的学习(22)

第四章 流程控制之条件判断 条件判断语句是一种最简单的流程控制语句。该语句使得程序根据不同的条件来执行不同的程序分支。本节将介绍Shell程序设计中的简单的条件判断语句。 if语句语法 单分支结构 # 语法1&#xff1a; if <条件表达式> then指令 fi #语法2&#x…...

【前端知识】简单讲讲什么是微前端

微前端介绍 一、定义二、背景三、核心思想四、基本要素五、核心价值六、实现方式七、应用场景八、挑战与解决方案 什么是single-spa一、核心特点二、核心原理三、应用加载流程四、最佳实践五、优缺点六、应用场景 什么是 qiankun一、概述二、特点与优势三、核心功能四、使用场景…...

AWS IAM

一、介绍 1、简介 AWS Identity and Access Management (IAM) 是 Amazon Web Services 提供的一项服务,用于管理 AWS 资源的访问权限。通过 IAM,可以安全地控制用户、组和角色对 AWS 服务和资源的访问权限。IAM 是 AWS 安全模型的核心组成部分,确保只有经过授权的用户和应…...

丹摩|丹摩助力selenium实现大麦网抢票

丹摩&#xff5c;丹摩助力selenium实现大麦网抢票 声明&#xff1a;非广告&#xff0c;为用户体验 1.引言 在人工智能飞速发展的今天&#xff0c;丹摩智算平台&#xff08;DAMODEL&#xff09;以其卓越的AI算力服务脱颖而出&#xff0c;为开发者提供了一个简化AI开发流程的强…...

基于Qt/C++/Opencv实现的一个视频中二维码解析软件

本文详细讲解了如何利用 Qt 和 OpenCV 实现一个可从视频和图片中检测二维码的软件。代码实现了视频解码、多线程处理和界面更新等功能&#xff0c;是一个典型的跨线程图像处理项目。以下分模块对代码进行解析。 一、项目的整体结构 项目分为以下几部分&#xff1a; 主窗口 (M…...

智慧理财项目测试文档

目录 幕布思维导图链接&#xff1a;https://www.mubu.com/doc/6xk3c7DzgFs学习链接&#xff1a;https://www.bilibili.com/video/BV15J4m147vZ/?spm_id_from333.999.0.0&vd_source078d5d025b9cb472d70d8fda1a7dc5a6智慧理财项目测试文档项目介绍项目基本信息项目业务特性系…...

R | 统一栅格数据的坐标系、分辨率和行列号

各位同学&#xff0c;在做相关性等分析时&#xff0c;经常会遇到各栅格数据间的行列号不统一等问题&#xff0c;下面的代码能直接解决这类麻烦。以某个栅格数据的坐标系、分辨率和行列号为准&#xff0c;统一文件夹内所有栅格并输出到新的文件夹。 代码只需要更改输入输出和ti…...

C++学习——编译的过程

编译的过程——预处理 引言预处理包含头文件宏定义指令条件编译 编译、链接 引言 C程序编译的过程&#xff1a;预处理 -> 编译&#xff08;优化、汇编&#xff09;-> 链接 编译和链接的内容可以查阅这篇文章&#xff08;点击查看&#xff09; 预处理 编译预处理是指&a…...

当你要改文件 但是原来的文件内容又不能丢失的时候,拷贝一份(备注原来的),然后添加后缀:.bak

当你要改文件 但是原来的文件内容又不能丢失的时候&#xff0c;拷贝一份&#xff08;备注原来的&#xff09;&#xff0c;然后添加后缀&#xff1a;.bak &#xff01;&#xff01;&#xff01;文件不要直接删除&#xff0c;若你以后要还原的话会找不到...

MATLAB神经网络(五)——R-CNN视觉检测

5.1 目标分类、检测与分割 在计算机视觉领域&#xff0c;目标分类、检测与分割是常用计数。三者的联系与区分又在哪呢&#xff1f;目标分类是解决图像中的物体是什么的问题&#xff1b;目标检测是解决图像中的物体是什么&#xff0c;在哪里的问题&#xff1b;目标分割时将目标和…...

mock.js:定义、应用场景、安装、配置、使用

前言&#xff1a;什么是mock.js&#xff1f; 作为一个前端程序员&#xff0c;没有mockjs你不感觉很被动吗&#xff1f;你不感觉你的命脉被后端那个男人掌握了吗&#xff1f;所以&#xff0c;我命由我不由天&#xff01;学学mock.js吧&#xff01; mock.js 是一个用于生成随机…...

【GAT】 代码详解 (1) 运行方法【pytorch】可运行版本

GRAPH ATTENTION NETWORKS 代码详解 前言0.引言1. 环境配置2. 代码的运行2.1 报错处理2.2 运行结果展示 3.总结 前言 在前文中&#xff0c;我们已经深入探讨了图卷积神经网络和图注意力网络的理论基础。还没看的同学点这里补习下。接下来&#xff0c;将开启一个新的阶段&#…...

Transformer中的Self-Attention机制如何自然地适应于目标检测任务

Transformer中的Self-Attention机制如何自然地适应于目标检测任务&#xff1a; 特征图的降维与重塑 首先&#xff0c;Backbone&#xff08;如ResNet、VGG等&#xff09;会输出一个特征图&#xff0c;这个特征图通常具有较高的通道数、高度和宽度&#xff08;例如CHW&#xff…...

2411rust,1.75.0

原文 Rust团队很高兴地声明推出Rust的新版本1.75.0. 如果你rustup安装了以前版本的Rust,你可如下取1.75.0: $ rustup update stable1.75.0稳定版中的功能 async fn和特征中的返回位置impl Trait. 指针字节偏移API 原始指针(*const T和*mutT)过去主要支持,T为单位的操作.如…...

dreawever如何做本地网站/全网自媒体平台大全

栈的实现 实现一个栈,当务之急是决定存储数据的底层数据结构。这里采用的是数组。 我们的实现以定义 Stack 类的构造函数开始: function Stack() { this.dataStore []; this.top 0; this.push push; this.pop pop; this.peek peek; } 我们用数组 dataStore 保存栈内元素,构…...

大学生项目app策划书/常州百度关键词优化

这个也是我刚学C语言的疑问&#xff0c;当时总是写一些比较大小&#xff0c;排序之类的函数&#xff0c;很是枯燥&#xff0c;也学的不怎么样。学东西是要有用它的地方才有动力继续学习&#xff0c;C语言的应用很广的&#xff0c;比如 我以前学习的单片机&#xff0c;现在学习的…...

北京建设高端网站的/精准ip地址查询工具

C TCP Server 用C写网络程序需要winsock2.h这个头文件,还有添加一个ws2_32.lib的lib库. VC2005添加Lib库的方法1 项目- Server属性- 配置属性- 连接器- 附加依赖项2 #pragma comment(lib,"ws2_32.lib")3 查找ws2_32.lib文件项目- 添加现有项,将ws2_32.lib作为文件…...

百度云搭建网站/墨猴seo排名公司

在前端开发当中&#xff0c;我们都知道有些交互事件&#xff0c;会频繁触发。这样会导致我们的页面渲染性能&#xff0c;如果频繁触发接口调用的话&#xff0c;会直接导致服务器性能的浪费。话不多说&#xff0c;盘它&#xff01;我们先简单列一下onresize onmousemove onkeydo…...

机械网站建设价格/技能培训网

作者&#xff1a;SmartMax 链接&#xff1a;https://www.zhihu.com/question/30711594/answer/164335112 来源&#xff1a;知乎 著作权归作者所有。商业转载请联系作者获得授权&#xff0c;非商业转载请注明出处。 如下过程部署服务器。 这时候默认的安全组配置 &#xff0…...

网站备案背景布/站牛网是做什么的

作者&#xff1a;张华 发表于&#xff1a;2016-02-25 版权声明&#xff1a;可以任意转载&#xff0c;转载时请务必以超链接形式标明文章原始出处和作者信息及本版权声明 ( http://blog.csdn.net/quqi99 ) 使用gdb或者crash时需要debug symbols, 可以从http://ddebs.ubuntu.…...