首页 > 编程语言 >实现简易计算器 网格布局 QT环境 纯代码C++实现

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

时间:2024-11-19 10:46:02浏览次数:3  
标签:layout QT button 网格 C++ label current QPushButton addWidget

问题:通过代码完成一个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_OBJECT

public:
    explicit Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;
    int num1; // 操作数1
    int num2; // 操作数2
    QString m_operator; // 运算符
    QString current_input1; // 操作数1
    QString current_input2; // 操作数2
    int 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);

    current_input1.clear(); // 清空字符串
    current_input2.clear();
    flag = 0; // flag置0

    QLabel *label = new QLabel; // 结果输出框label
    label->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();
}

输出:

初始化界面:

示例:

标签:layout,QT,button,网格,C++,label,current,QPushButton,addWidget
From: https://blog.csdn.net/2301_77329667/article/details/143875902

相关文章

  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要21世纪的今天,随着社会的不断发展与进步,人们对于信息科学化的认识,已由低层次向高层次发展,由原来的感性认知向理性认知提高,管理工作的重要性已逐渐被人们所认识,科学化的管理,使信息存储达到准确、快速、完善,并能提高工作管理效率,促进其发展。论文主要是对医疗门诊管理......
  • (分享源码)计算机毕业设计必看必学 上万套实战教程手把手教学JAVA、PHP,node.js,C++、pyth
     摘 要随着我国经济迅速发展,人们对手机的需求越来越大,各种手机软件也都在被广泛应用,但是对于手机进行数据信息管理,对于手机的各种软件也是备受用户的喜爱,校园跳蚤市场管理系统被用户普遍使用,为方便用户能够可以随时进行校园跳蚤市场管理系统的数据信息管理,特开发了基于spri......
  • 解锁C++第二大特性,代码也玩“父子”游戏——继承
    解锁C++第二大特性,代码也玩“父子”游戏——继承文章目录解锁C++第二大特性,代码也玩“父子”游戏——继承前言——封装封装的本质是什么?封装的总结一、继承的基本概念1.1继承的定义二、继承的三种方式2.1私有不可见2.2公有、保护的继承2.3基类和派生类对象赋值......
  • 如何在 Ubuntu 上安装 Mosquitto MQTT 代理
    如何在Ubuntu上安装MosquittoMQTT代理Mosquitto是一个开源的消息代理,实现了消息队列遥测传输(MQTT)协议。在Ubuntu22.04上安装MQTT代理,您可以利用MQTT轻量级的TCP/IP消息平台,该平台专为资源有限的物联网(IoT)设备设计,例如带宽低或电池寿命短的设备。Mos......
  • C++---智能指针和内存泄露
    文章目录智能指针**发展历史****C++11前****C++11引入的智能指针****智能指针的使用及原理**shared_ptr的循环引用**循环引用的场景**通过weak_ptr来解决shared_ptr的循环引用智能指针的模拟实现内存泄露内存泄露的概念和危害内存泄露分类如何检测内存泄露如何避免内存......
  • C++ -class -默认成员函数
    博客主页:【夜泉_ly】本文专栏:【C++】欢迎点赞......
  • C++ 虚函数探讨
    文章目录1.虚函数表指针位置分析1.1、虚函数表指针的定义1.2、虚函数表指针的位置2.父类虚函数的手动调用2.1通过虚函数表查看虚函数地址2.2通过虚函数表手动调用虚函数3.继承关系下子类的虚函数手动调用3.1通过虚函数表查看虚函数的地址3.2通过虚函数表手动调用......
  • C/C++ 知识点:extern 关键字
    文章目录一、extern关键字1、什么是extern?2、基本用法2.1、声明全局变量2.2、声明函数2.3、使const变量具备外部连接性3、`extern"C"`特殊用途3.1、C调用C++3.2、C++调用C4、注意事项5、总结前言:在C和C++编程语言中,extern关键字扮演着连接不同源文件(或称为翻......
  • 什么是 C++ 中的友元函数和友元类?友元的作用是什么?有什么注意事项?
    友元函数(FriendFunction)定义友元函数是在类定义中用关键字friend声明的非成员函数。它可以访问类的私有(private)和保护(protected)成员。作用和使用场景友元函数主要用于在某些情况下,需要在类的外部函数中访问类的私有或保护成员。例如,在操作符重载中,当需要访问类的私有数......
  • 打卡信奥刷题(262)用C++信奥P2004[普及组/提高] 领地选择
    领地选择题目描述作为在虚拟世界里统帅千军万马的领袖,小Z认为天时、地利、人和三者是缺一不可的,所以,谨慎地选择首都的位置对于小Z来说是非常重要的。首都被认为是一个占地C×......