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

ops/2024/11/22 21:17:20/

问题:通过代码完成一个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();
}

输出:

初始化界面:

示例:


http://www.ppmy.cn/ops/135886.html

相关文章

大数据治理的核心要素

大数据治理的要素是指为实现对数据的高效管理和利用所需的核心组成部分。这些要素相互关联,共同构建了完整的大数据治理体系。以下是主要的要素: 1. 数据质量管理 数据质量管理确保数据在全生命周期中保持高质量,能被有效使用和信任。 目标 提升数据的准确性、完整性、一致…

Vue项目搭建-2-组合式API

入口-setup 在组件渲染时会优先执行 setup 中代码&#xff0c;执行时机为 beforeCreate 之前 setup 方法中的对象若想要在 template 中使用&#xff0c;需要将方法 return 出去: <script> export default {setup() {console.log(setup had run)const msg "hello…

RK3568 android11 适配敦泰触摸屏 FocalTech-ft5526

一&#xff0c;FocalTech触摸屏简介 FocalTech 的触控控制器常用于各种触摸屏&#xff0c;包括电容式和电阻式屏幕。支持多点触控&#xff0c;能够识别多个手指的输入。 本文提到的 ft5526 支持多达 10 个触控点&#xff0c;能够同时识别多个手指的输入&#xff0c;适合需要复…

SWPUCTF 2024 奇迹新生塞 签到?

很久没有做CTF逆向&#xff0c;找了一道题试一试 还是常规操作看看&#xff0c;多少位的&#xff0c;有没有带壳 再看看是不是EXE程序 先运行看看有什么特别的 尝试输入了一下&#xff0c;直接退出了 IDA打开进行分析 找到主函数 一步一步调试看看&#xff0c;找到运行输出的…

Win11下载和配置VSCode(详细讲解)

配置VSCode需要的工具&#xff1a; 一、MinGW-w64 二、Visual Studio Code 一、MinGW-w64下载 1、下载 MinGW官网地址&#xff1a; Downloads - MinGW-w64 直链下载&#xff1a; 下载 mingw-w64-install.exe &#xff08;MinGW-w64 - 适用于 32 位和 64 位 Windows&#…

Restful API 规范详解

Restful API 规范详解 在现代Web开发中&#xff0c;RESTful API 已经成为了构建Web服务的标准方式之一。它不仅简化了Web服务的设计&#xff0c;还提高了系统的可扩展性和互操作性。本文将详细介绍 RESTful API 的设计原则、规范和最佳实践&#xff0c;帮助开发者更好地理解和…

微信小程序样式

一、尺寸单位rpx rpx是小程序新增加的自适应单位&#xff0c;可以根据不同设备的屏幕宽度进行自适应缩放。 小程序规定任何型号手机屏幕宽度都是750rpx。 提示&#xff1a;微信小程序的设计稿宽度建议是750px&#xff0c;这样就节省单位换算了。 二、全局样式和局部样式 1、…

网络安全、Web安全、渗透测试之笔经面经总结

本篇文章涉及的知识点有如下几方面&#xff1a; 1.什么是WebShell? 2.什么是网络钓鱼&#xff1f; 3.你获取网络安全知识途径有哪些&#xff1f; 4.什么是CC攻击&#xff1f; 5.Web服务器被入侵后&#xff0c;怎样进行排查&#xff1f; 6.dll文件是什么意思&#xff0c;…