QT——简易计算机(从0开始)

目录

一、题目描述:

二、创建工程:

三、UI界面设计:

四、程序编写:

五、总程序:

六、windows可执行文件

七、实现效果


一、题目描述:

        创建一个简单的图形用户界面(GUI),包括一个文本框用于显示计算结果,以及数字键盘和运算符按钮。用户可以通过点击这些按钮输入数字和运算符,并查看计算结果。

        实现计算功能,编写相应的代码逻辑。当用户输入两个数字和一个运算符时,程序会根据运算符执行相应的加、减、乘、除运算,并将结果显示在文本框中。简化:要求不包含小数,使用整数运算。

        以简洁明了的方式呈现给用户,使用户可以轻松地进行基本的算术计算。尽量确保界面设计简单大方,操作直观,为用户提供良好的使用体验。

二、创建工程:

1. 
 
2. 

3. 

4. 默认

5. 

6. 

7.

8. 默认

9. 创建完成

三、UI界面设计:

1. 添加按钮

1. 

2. 按钮界面

3. 按钮绑定快捷键

2. 文本框添加

1. 文本框字体

2. 默认文本

3. 文本对齐方式

3. 添加图片

1. 找到图片并添加到工程目录下

        

2.  

3. 

4. 图片名称

5. 

6.添加-->添加前缀

7. 改成一个下划线

7. 再次添加 -- > 添加文件,此次有 添加文件 了

8.选择图片文件

9. 成功添加文件 -->>> 运行一下

10. 成功

4. 按钮添加图片

 1. -->> 选择资源

2. 选择对应的图片资源

3. 添加成功

5. UI界面大致样式

四、程序编写:

1. 思路:

        用两个类来处理,一个data保存运算符,数字等。一个用于保存算式计算函数。

        data类,中初始化数据,2为数据,一个运算符,一个状态数。

        Calculate类:主一个运算函数,多个触发信号

2. 创建类:

1.

2. 

3.

4.

5. 创建成功

6. 同上方式载创建一个 Calculate 类

3. data类:

(1)data.h

#ifndef DATA_H
#define DATA_H#include <QObject>//#include <dialog.h>class Data : public QObject
{Q_OBJECT
public:explicit Data(QObject *parent = nullptr);int num1;int num2;int state; //保存当前数据状态char operator_c;    //运算符signals:public slots:void  init_data();//初始化数据//int update_satate(int a,int b, int i);         //根据状态改变数void  update(int a);                            //将数据更新 比如原本是 1 按下 5 后通过此函数  变成 51;void  upstate(int i);                           //更新状态  0更改num1 // 1更改char // 2 更改 num2void  backspace();                              //删除键void  display_data(int i);                      //显示计算数据};#endif // DATA_H

(2)data.cpp

          1. 初始化数据
void Data::init_data(){num1 = 0;num2 = 0;state = 0;operator_c = ' ';
}
        2. 数据更新

        根据不同状态,看保存到第一位数据还是第二位数据

void Data::update(int a){   //将数据更新 //比如原本是 1 按下 5 后通过此函数  变成 51;//状态更新处理if(state == 1){upstate(2);}if(state == 0) num1 = num1*10+a;else if(state == 2) num2 = num2*10+a;}
        3. 显示计算数据
void Data::display_data(int i){    //显示计算数据if(i == 0){qDebug()<<num1<<" ";//<<operator_c<<" "<<num2;}else if( i == 1)qDebug()<<num1<<" "<<operator_c;//<<" "<<num2;else if( i == 2)qDebug()<<num1<<" "<<operator_c<<" "<<num2;elseqDebug()<<num1<<" ";//<<operator_c<<" "<<num2;qDebug()<<"     ";}
        4. 更新状态
void Data::upstate(int i){             //更新状态  0更改num1 // 1更改char // 2 更改 num2state = i;
}
        5. 删除键处理

        根据状态从最后一会数据开始删除。

        6. data.cpp总代码
#include "data.h"#include "QDebug"
#pragma execution_character_set("utf-8")#include <QLineEdit>Data::Data(QObject *parent) : QObject(parent)
{}void Data::init_data(){num1 = 0;num2 = 0;state = 0;operator_c = ' ';
}void Data::update(int a){   //将数据更新 //比如原本是 1 按下 5 后通过此函数  变成 51;//状态更新处理if(state == 1){upstate(2);}if(state == 0) num1 = num1*10+a;else if(state == 2) num2 = num2*10+a;
}void Data::display_data(int i){    //显示计算数据if(i == 0){qDebug()<<num1<<" ";//<<operator_c<<" "<<num2;}else if( i == 1)qDebug()<<num1<<" "<<operator_c;//<<" "<<num2;else if( i == 2)qDebug()<<num1<<" "<<operator_c<<" "<<num2;elseqDebug()<<num1<<" ";//<<operator_c<<" "<<num2;qDebug()<<"     ";}void Data::upstate(int i){             //更新状态  0更改num1 // 1更改char // 2 更改 num2state = i;
}void  Data::backspace(){                              //删除键if(state == 0){num1 = num1/10;}else if(state == 1){state = 0;}else if(state == 2){num2 = num2/10;if(num2 == 0) state = 1;}
}

4. Calculate类:

(1)calculate.h

#ifndef CALCULATE_H
#define CALCULATE_H#include <QObject>class Calculate : public QObject
{Q_OBJECT
public:explicit Calculate(QObject *parent = nullptr);signals:void signal_num(int a); //num 触发信号void display(int i);    //计算机显示界面void backspace();       //删除键触发信号public slots:float operation(int num1, char c, int num2);    //运算函数//float operation(float num1, char c, float num2);    //运算函数
};#endif // CALCULATE_H

(2)calculate.cpp 

#include "calculate.h"
#include <iostream>
#include "QDebug"
#pragma execution_character_set("utf-8")Calculate::Calculate(QObject *parent) : QObject(parent)
{}//float Calculate::operation(float num1, char c, float num2){    //运算函数
float Calculate::operation(int num1, char c, int num2){    //运算函数float num = 0;if(c == '+'){num = num1 + num2;}else if(c == '-'){num = num1 - num2;}else if(c == '*'){num = num1 * num2;}else if(c == '/'){num = static_cast<float>(num1) / num2;  //static_cast<float>强制转换}else{qDebug()<<"运算符不在以知范围内";}return num;
}

5. Dialog (联系/对象/触发信号)

(1)dialog .h 

        1. 创建对象
    Data *data = new Data;  //创建数字Calculate *calculate = new Calculate;   //创建运算函数
        2. 计算函数触发信号

signals:void display_data_signals(int num1, char c, int num2, int state);//显示计算数据
        3. 文本框显示处理函数

private slots:void  display_data(int num1, char c, int num2, int state);//显示计算数据

(2)dialog .cpp(联系及初始化)

        1. 联系及其初始化
    data -> init_data();    //初始化数据connect(calculate, SIGNAL(signal_num(int)), data, SLOT(update(int)));           //数据联系connect(calculate, SIGNAL(display(int)), data, SLOT(display_data(int)));        //显示联系 终点显示connect(calculate, SIGNAL(backspace()), data, SLOT(backspace()));               //删除键 -联系connect(this, SIGNAL(display_data_signals(int,char,int,int)), this, SLOT(display_data(int,char,int,int)));               //文本框显示
        2. 显示计算数据(注意头文件)

#include <cstdio>
#include <string>
#include <QLineEdit>void  Dialog::display_data(int num1, char c, int num2, int state){//显示计算数据char num1_c[20];sprintf(num1_c, "%d", num1);char num2_c[20];sprintf(num2_c, "%d", num2);std::string result;//拼接字符串if(state == 0)result = std::to_string(num1);else if( state == 1)result = std::to_string(num1) + c;else if( state == 2)result = std::to_string(num1) + c + std::to_string(num2);elseresult = std::to_string(num1);ui->lineEdit->setText(result.c_str());
}

6.  Dialog(按键处理)

1. 按键转为槽方法

        1. 

        2. 

        3. 

2. 0~9数字按键处理

        此处调用 signal_num(i)  i 为每次输入的数字,剩下两行显示在终端和文本框;


//按钮 0
void Dialog::on_pushButton_10_clicked()
{emit this -> calculate -> signal_num(0);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}

        其余0~9的按键通用,只是传入数字不一样

3. 运算符处理

        其余减乘除同理 除非符合位不一样


//按钮 +
void Dialog::on_pushButton_13_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '+';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框}

4. 计算结果


//计算结果
void Dialog::on_pushButton_12_clicked()
{emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框//计算结果float num = calculate -> operation(data -> num1, data->operator_c, data -> num2);qDebug()<<"    = "<<num;int num_n = num;//获取其整数值char num_c[20];if(data -> operator_c == '/')sprintf(num_c, "= %f", num);elsesprintf(num_c, "= %d", num_n);ui->lineEdit->setText(num_c);//将计算结果给num1;//data -> num1 = static_cast<int>(num); //static_cast<float>强制转换//data -> upstate(0);data -> init_data(); //从0开始 //清零data -> num1 = num_n;qDebug()<<"  ";
}

5. 删除键


//删除键
void Dialog::on_pushButton_18_clicked()
{emit this -> calculate -> backspace();              //触发删除键emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}

6. 清零键

//清零
void Dialog::on_pushButton_17_clicked()
{data -> init_data(); //从0开始 //清零emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}

7. 图像小按键

void Dialog::on_pushButton_11_clicked()
{static  int i = -1;i++;switch(i){case 0:{ui->lineEdit->setText("(๑°⌓°๑)       ");qDebug()<<"被发现了!!!";break;}case 1:{ui->lineEdit->setText("˳⚆ɞ⚆˳       ");qDebug()<<"又发现了一个!!!";break;}case 2:{ui->lineEdit->setText("દ ᵕ̈ ૩        ");qDebug()<<"别找了别找了 !!!";break;}case 3:{ui->lineEdit->setText("(•̥́_•ૅू˳)       ");qDebug()<<"投降投降-->> !!!";break;}case 4:{ui->lineEdit->setText("♪(゚▽^*)ノ⌒☆ ");qDebug()<<"啦~啦~啦 听歌吗 !!!";break;}case 5:{ui->lineEdit->setText("~⃝ ˶ʜᴀᴘᴘʏ ᴅᴀʏs");qDebug()<<" !!!";break;}default :{ui->lineEdit->setText("没图了,下班");i = -1;}}}

7.  Dialog(总程序)

(1)dialog .h 

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <data.h>
#include <calculate.h>
QT_BEGIN_NAMESPACEnamespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();Data *data = new Data;  //创建数字Calculate *calculate = new Calculate;   //创建运算函数signals:void display_data_signals(int num1, char c, int num2, int state);//显示计算数据private slots:void  display_data(int num1, char c, int num2, int state);//显示计算数据void on_pushButton_10_clicked();void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_pushButton_9_clicked();void on_pushButton_13_clicked();void on_pushButton_14_clicked();void on_pushButton_15_clicked();void on_pushButton_16_clicked();void on_pushButton_18_clicked();void on_pushButton_12_clicked();void on_pushButton_17_clicked();void on_pushButton_11_clicked();private:Ui::Dialog *ui;
};#endif // DIALOG_H

(2)dialog .cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <iostream>
#include <QMessageBox> // 包含QMessageBox头文件
#include "QDebug"
#pragma execution_character_set("utf-8")#include <cstdio>
#include <string>
#include <QLineEdit>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);data -> init_data();    //初始化数据connect(calculate, SIGNAL(signal_num(int)), data, SLOT(update(int)));           //数据联系connect(calculate, SIGNAL(display(int)), data, SLOT(display_data(int)));        //显示联系 终点显示connect(calculate, SIGNAL(backspace()), data, SLOT(backspace()));               //删除键 -联系connect(this, SIGNAL(display_data_signals(int,char,int,int)), this, SLOT(display_data(int,char,int,int)));               //文本框显示//按键已与键盘正常绑定 可直接键盘输入 空格清零//小数点有彩蛋}Dialog::~Dialog()
{delete ui;
}void  Dialog::display_data(int num1, char c, int num2, int state){//显示计算数据char num1_c[20];sprintf(num1_c, "%d", num1);char num2_c[20];sprintf(num2_c, "%d", num2);std::string result;//拼接字符串if(state == 0)result = std::to_string(num1);else if( state == 1)result = std::to_string(num1) + c;else if( state == 2)result = std::to_string(num1) + c + std::to_string(num2);elseresult = std::to_string(num1);ui->lineEdit->setText(result.c_str());
}//按钮 0
void Dialog::on_pushButton_10_clicked()
{emit this -> calculate -> signal_num(0);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 1
void Dialog::on_pushButton_clicked()
{emit this -> calculate -> signal_num(1);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 2
void Dialog::on_pushButton_2_clicked()
{emit this -> calculate -> signal_num(2);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 3
void Dialog::on_pushButton_3_clicked()
{emit this -> calculate -> signal_num(3);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 4
void Dialog::on_pushButton_4_clicked()
{emit this -> calculate -> signal_num(4);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 5
void Dialog::on_pushButton_5_clicked()
{emit this -> calculate -> signal_num(5);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 6
void Dialog::on_pushButton_6_clicked()
{emit this -> calculate -> signal_num(6);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 7
void Dialog::on_pushButton_7_clicked()
{emit this -> calculate -> signal_num(7);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 8
void Dialog::on_pushButton_8_clicked()
{emit this -> calculate -> signal_num(8);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 9
void Dialog::on_pushButton_9_clicked()
{emit this -> calculate -> signal_num(9);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 +
void Dialog::on_pushButton_13_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '+';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框}//按钮 -
void Dialog::on_pushButton_14_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '-';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 *
void Dialog::on_pushButton_15_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '*';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 /
void Dialog::on_pushButton_16_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求  直接计算this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '/';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//删除键
void Dialog::on_pushButton_18_clicked()
{emit this -> calculate -> backspace();              //触发删除键emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//计算结果
void Dialog::on_pushButton_12_clicked()
{emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框//计算结果float num = calculate -> operation(data -> num1, data->operator_c, data -> num2);qDebug()<<"    = "<<num;int num_n = num;//获取其整数值char num_c[20];if(data -> operator_c == '/')sprintf(num_c, "= %f", num);elsesprintf(num_c, "= %d", num_n);ui->lineEdit->setText(num_c);//将计算结果给num1;//data -> num1 = static_cast<int>(num); //static_cast<float>强制转换//data -> upstate(0);data -> init_data(); //从0开始 //清零data -> num1 = num_n;qDebug()<<"  ";
}//清零
void Dialog::on_pushButton_17_clicked()
{data -> init_data(); //从0开始 //清零emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}void Dialog::on_pushButton_11_clicked()
{static  int i = -1;i++;switch(i){case 0:{ui->lineEdit->setText("(๑°⌓°๑)       ");qDebug()<<"被发现了!!!";break;}case 1:{ui->lineEdit->setText("˳⚆ɞ⚆˳       ");qDebug()<<"又发现了一个!!!";break;}case 2:{ui->lineEdit->setText("દ ᵕ̈ ૩        ");qDebug()<<"别找了别找了 !!!";break;}case 3:{ui->lineEdit->setText("(•̥́_•ૅू˳)       ");qDebug()<<"投降投降-->> !!!";break;}case 4:{ui->lineEdit->setText("♪(゚▽^*)ノ⌒☆ ");qDebug()<<"啦~啦~啦 听歌吗 !!!";break;}case 5:{ui->lineEdit->setText("~⃝ ˶ʜᴀᴘᴘʏ ᴅᴀʏs");qDebug()<<" !!!";break;}default :{ui->lineEdit->setText("没图了,下班");i = -1;}}}

8. 主函数

#include "dialog.h"#include <QApplication>
#include <QIcon>#include "QDebug"
#pragma execution_character_set("utf-8")#include <QApplication>
#include <QLabel>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();w.setWindowTitle("0X78的计算机");w.setWindowIcon(QIcon(":/img/JSJ.jpg"));return a.exec();
}

五、总程序:

1. headers

        1. Calculate.h

#ifndef CALCULATE_H
#define CALCULATE_H#include <QObject>class Calculate : public QObject
{Q_OBJECT
public:explicit Calculate(QObject *parent = nullptr);signals:void signal_num(int a); //num 触发信号void display(int i);    //计算机显示界面void backspace();       //删除键触发信号public slots:float operation(int num1, char c, int num2);    //运算函数//float operation(float num1, char c, float num2);    //运算函数
};#endif // CALCULATE_H

        2. Data.h

#ifndef DATA_H
#define DATA_H#include <QObject>//#include <dialog.h>class Data : public QObject
{Q_OBJECT
public:explicit Data(QObject *parent = nullptr);int num1;int num2;int state; //保存当前数据状态char operator_c;    //运算符signals:public slots:void  init_data();//初始化数据//int update_satate(int a,int b, int i);         //根据状态改变数void  update(int a);                            //将数据更新 比如原本是 1 按下 5 后通过此函数  变成 51;void  upstate(int i);                           //更新状态  0更改num1 // 1更改char // 2 更改 num2void  backspace();                              //删除键void  display_data(int i);                      //显示计算数据};#endif // DATA_H

        3. Dialog.h

#ifndef DIALOG_H
#define DIALOG_H#include <QDialog>
#include <data.h>
#include <calculate.h>
QT_BEGIN_NAMESPACEnamespace Ui { class Dialog; }
QT_END_NAMESPACEclass Dialog : public QDialog
{Q_OBJECTpublic:Dialog(QWidget *parent = nullptr);~Dialog();Data *data = new Data;  //创建数字Calculate *calculate = new Calculate;   //创建运算函数signals:void display_data_signals(int num1, char c, int num2, int state);//显示计算数据private slots:void  display_data(int num1, char c, int num2, int state);//显示计算数据void on_pushButton_10_clicked();void on_pushButton_clicked();void on_pushButton_2_clicked();void on_pushButton_3_clicked();void on_pushButton_4_clicked();void on_pushButton_5_clicked();void on_pushButton_6_clicked();void on_pushButton_7_clicked();void on_pushButton_8_clicked();void on_pushButton_9_clicked();void on_pushButton_13_clicked();void on_pushButton_14_clicked();void on_pushButton_15_clicked();void on_pushButton_16_clicked();void on_pushButton_18_clicked();void on_pushButton_12_clicked();void on_pushButton_17_clicked();void on_pushButton_11_clicked();private:Ui::Dialog *ui;
};#endif // DIALOG_H

2. Soures

  1. Calculate.cpp

#include "calculate.h"
#include <iostream>
#include "QDebug"
#pragma execution_character_set("utf-8")Calculate::Calculate(QObject *parent) : QObject(parent)
{}//float Calculate::operation(float num1, char c, float num2){    //运算函数
float Calculate::operation(int num1, char c, int num2){    //运算函数float num = 0;if(c == '+'){num = num1 + num2;}else if(c == '-'){num = num1 - num2;}else if(c == '*'){num = num1 * num2;}else if(c == '/'){num = static_cast<float>(num1) / num2;  //static_cast<float>强制转换}else{qDebug()<<"运算符不在以知范围内";}return num;
}

        2. Data.cpp

#include "data.h"#include "QDebug"
#pragma execution_character_set("utf-8")#include <QLineEdit>Data::Data(QObject *parent) : QObject(parent)
{}void Data::init_data(){num1 = 0;num2 = 0;state = 0;operator_c = ' ';
}void Data::update(int a){   //将数据更新 //比如原本是 1 按下 5 后通过此函数  变成 51;//状态更新处理if(state == 1){upstate(2);}if(state == 0) num1 = num1*10+a;else if(state == 2) num2 = num2*10+a;
}void Data::display_data(int i){    //显示计算数据if(i == 0){qDebug()<<num1<<" ";//<<operator_c<<" "<<num2;}else if( i == 1)qDebug()<<num1<<" "<<operator_c;//<<" "<<num2;else if( i == 2)qDebug()<<num1<<" "<<operator_c<<" "<<num2;elseqDebug()<<num1<<" ";//<<operator_c<<" "<<num2;qDebug()<<"     ";}void Data::upstate(int i){             //更新状态  0更改num1 // 1更改char // 2 更改 num2state = i;
}void  Data::backspace(){                              //删除键if(state == 0){num1 = num1/10;}else if(state == 1){state = 0;}else if(state == 2){num2 = num2/10;if(num2 == 0) state = 1;}
}

        3. Dialog.cpp

#include "dialog.h"
#include "ui_dialog.h"
#include <iostream>
#include <QMessageBox> // 包含QMessageBox头文件
#include "QDebug"
#pragma execution_character_set("utf-8")#include <cstdio>
#include <string>
#include <QLineEdit>Dialog::Dialog(QWidget *parent): QDialog(parent), ui(new Ui::Dialog)
{ui->setupUi(this);data -> init_data();    //初始化数据connect(calculate, SIGNAL(signal_num(int)), data, SLOT(update(int)));           //数据联系connect(calculate, SIGNAL(display(int)), data, SLOT(display_data(int)));        //显示联系 终点显示connect(calculate, SIGNAL(backspace()), data, SLOT(backspace()));               //删除键 -联系connect(this, SIGNAL(display_data_signals(int,char,int,int)), this, SLOT(display_data(int,char,int,int)));               //文本框显示//按键已与键盘正常绑定 可直接键盘输入 空格清零//小数点有彩蛋}Dialog::~Dialog()
{delete ui;
}void  Dialog::display_data(int num1, char c, int num2, int state){//显示计算数据char num1_c[20];sprintf(num1_c, "%d", num1);char num2_c[20];sprintf(num2_c, "%d", num2);std::string result;//拼接字符串if(state == 0)result = std::to_string(num1);else if( state == 1)result = std::to_string(num1) + c;else if( state == 2)result = std::to_string(num1) + c + std::to_string(num2);elseresult = std::to_string(num1);ui->lineEdit->setText(result.c_str());
}//按钮 0
void Dialog::on_pushButton_10_clicked()
{emit this -> calculate -> signal_num(0);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 1
void Dialog::on_pushButton_clicked()
{emit this -> calculate -> signal_num(1);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 2
void Dialog::on_pushButton_2_clicked()
{emit this -> calculate -> signal_num(2);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 3
void Dialog::on_pushButton_3_clicked()
{emit this -> calculate -> signal_num(3);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 4
void Dialog::on_pushButton_4_clicked()
{emit this -> calculate -> signal_num(4);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 5
void Dialog::on_pushButton_5_clicked()
{emit this -> calculate -> signal_num(5);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 6
void Dialog::on_pushButton_6_clicked()
{emit this -> calculate -> signal_num(6);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 7
void Dialog::on_pushButton_7_clicked()
{emit this -> calculate -> signal_num(7);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 8
void Dialog::on_pushButton_8_clicked()
{emit this -> calculate -> signal_num(8);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 9
void Dialog::on_pushButton_9_clicked()
{emit this -> calculate -> signal_num(9);emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 +
void Dialog::on_pushButton_13_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '+';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框}//按钮 -
void Dialog::on_pushButton_14_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '-';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 *
void Dialog::on_pushButton_15_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '*';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//按钮 /
void Dialog::on_pushButton_16_clicked()
{if(data -> state == 2){ //如果前面已经满足等式要求  直接计算this -> on_pushButton_12_clicked();//计算出结果  并将结果保存到num1}data -> operator_c = '/';data -> state = 1;  //更新显示状态emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//删除键
void Dialog::on_pushButton_18_clicked()
{emit this -> calculate -> backspace();              //触发删除键emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}//计算结果
void Dialog::on_pushButton_12_clicked()
{emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框//计算结果float num = calculate -> operation(data -> num1, data->operator_c, data -> num2);qDebug()<<"    = "<<num;int num_n = num;//获取其整数值char num_c[20];if(data -> operator_c == '/')sprintf(num_c, "= %f", num);elsesprintf(num_c, "= %d", num_n);ui->lineEdit->setText(num_c);//将计算结果给num1;//data -> num1 = static_cast<int>(num); //static_cast<float>强制转换//data -> upstate(0);data -> init_data(); //从0开始 //清零data -> num1 = num_n;qDebug()<<"  ";
}//清零
void Dialog::on_pushButton_17_clicked()
{data -> init_data(); //从0开始 //清零emit this -> calculate -> display(data -> state);   //显示state下的emit this -> display_data_signals(data -> num1, data -> operator_c, data -> num2, data -> state);   //将数据显示到文本框
}void Dialog::on_pushButton_11_clicked()
{static  int i = -1;i++;switch(i){case 0:{ui->lineEdit->setText("(๑°⌓°๑)       ");qDebug()<<"被发现了!!!";break;}case 1:{ui->lineEdit->setText("˳⚆ɞ⚆˳       ");qDebug()<<"又发现了一个!!!";break;}case 2:{ui->lineEdit->setText("દ ᵕ̈ ૩        ");qDebug()<<"别找了别找了 !!!";break;}case 3:{ui->lineEdit->setText("(•̥́_•ૅू˳)       ");qDebug()<<"投降投降-->> !!!";break;}case 4:{ui->lineEdit->setText("♪(゚▽^*)ノ⌒☆ ");qDebug()<<"啦~啦~啦 听歌吗 !!!";break;}case 5:{ui->lineEdit->setText("~⃝ ˶ʜᴀᴘᴘʏ ᴅᴀʏs");qDebug()<<" !!!";break;}default :{ui->lineEdit->setText("没图了,下班");i = -1;}}}

        4. main.cpp

#include "dialog.h"#include <QApplication>
#include <QIcon>#include "QDebug"
#pragma execution_character_set("utf-8")#include <QApplication>
#include <QLabel>int main(int argc, char *argv[])
{QApplication a(argc, argv);Dialog w;w.show();w.setWindowTitle("0X78的计算机");w.setWindowIcon(QIcon(":/img/JSJ.jpg"));return a.exec();
}

六、windows可执行文件

1. 生成exe文件

        1.

        2.再次运行就能生成exe

        3. exe文件位置

2. exe文件存放

        新建一个文件夹将exe文件放入,这个文件夹是保存exe所有文件的。

3. 找到

4. 此处需要准确(二 、7)

这里选择的为最初创建文件时,(二 、7)

5. 执行 windeployqt  exe文件目录

比如:

运行完毕

七、实现效果

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

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

相关文章

Cisco IOS XE Web UI 权限提升漏洞复现(CVE-2023-20198)

0x01 产品简介 Web UI 是一种基于GUI的嵌入式系统管理工具,能够提供系统配置、简化系统部署和可管理性以及增强用户体验。它带有默认映像,因此无需在系统上启用任何内容或安装任何许可证。Web UI 可用于构建配置以及监控系统和排除系统故障,而无需CLI专业知识。 0x02 漏洞…

Linux命令大全 以及搭建hadoop

Liunx系统目录 ├── bin -> usr/bin # 用于存放二进制命令 ├── boot # 内核及引导系统程序所在的目录 ├── dev # 所有设备文件的目录&#xff08;如磁盘、光驱等&#xff09; ├── etc # 配置文件默认路径、服务启动命令存放目录 ├── home # 用户家目录&#…

快速了解Django:核心概念解析与实践指南

title: 快速了解Django&#xff1a;核心概念解析与实践指南 date: 2024/5/1 20:31:41 updated: 2024/5/1 20:31:41 categories: 后端开发 tags: Django核心路由系统视图系统ORM管理中间件Web框架登录装饰器 第一章&#xff1a;Django简介 背景和发展历程&#xff1a; Djan…

用Jenkins实现cherry-pick多个未入库的gerrit编译Android固件

背景: 在做Android固件开发的时候,通常我们可以利用gerrit-trigger插件,开发者提交一笔的时候自动触发jenkins编译,如果提交的这一笔的编译依赖其他gerrit才能编译过,我们可以在commit message中加入特殊字段,让jenkins在编译此笔patch的时候同时抓取依赖的gerrit代码下…

JSON教程(非常详细)

参考文章来源&#xff1a;JSON教程&#xff08;非常详细&#xff09; 目录 JSON JSON 发展史 为什么要使用 JSON&#xff1f; JSON 的不足 存储格式 使用场景 1) 定义接口 2) 序列化 3) 生成 Token 4) 配置文件 JSON语法规则 JSON 与 JavaScript 对象的区别 JSON数…

第7篇:创建Nios II工程之控制LED<二>

Q&#xff1a;上一期我们完成了Quartus硬件工程部分&#xff0c;本期我们创建Nios II软件工程这部分。 A&#xff1a;创建完BSP和Nios II Application之后&#xff0c;在source文件main.c中添加LED控制代码&#xff1a;system.h头文件包含了Platform Designer系统中IP的硬件信…

Kubernetes - CentOS7搭建k8s_v1.18集群高可用(kubeadm/二进制包部署方式)实测配置验证手册

Kubernetes - CentOS7搭建k8s集群高可用&#xff08;kubeadm/二进制包部署方式&#xff09;实测配置验证手册 前言概述&#xff1a; 一、Kubernetes—k8s是什么 Kubernetes 这个名字源于希腊语&#xff0c;意为“舵手“或”飞行员"。 Kubernetes&#xff0c;简称K8s&#…

Qwen-Audio:推动通用音频理解的统一大规模音频-语言模型(开源)

随着人工智能技术的不断进步&#xff0c;音频语言模型&#xff08;Audio-Language Models&#xff09;在人机交互领域变得越来越重要。然而&#xff0c;由于缺乏能够处理多样化音频类型和任务的预训练模型&#xff0c;该领域的进展受到了限制。为了克服这一挑战&#xff0c;研究…

51单片机入门(一)

1. 51单片机的基础介绍 2. RAM和ROM的区别 总体而言&#xff0c;RAM和ROM在计算机系统中起着不同的角色&#xff0c;RAM用于临时存储运行时数据&#xff0c;而ROM用于存储永久性的固件和系统程序。 3. 为什么叫51单片机 因为51系列单片机都是使用Intel 8031指令系统的单片机…

太速科技-多路PCIe的阵列计算全国产化服务器

多路PCIe的阵列计算全国产化服务器 多路PCIe的阵列计算全国产化服务器以国产化处理器&#xff08;海光、飞腾ARM、算能RSIC V&#xff09;为主板&#xff0c;扩展6-8路PCIe3.0X4计算卡&#xff1b; 计算卡为全国产化的AI处理卡&#xff08;瑞星微ARM&#xff0c;算能AI&#x…

《QT实用小工具·五十》动态增删数据与平滑缩放移动的折线图

1、概述 源码放在文章末尾 该项目实现了带动画、带交互的折线图&#xff0c;包含如下特点&#xff1a; 动态增删数值 自适应显示坐标轴数值 鼠标悬浮显示十字对准线 鼠标靠近点自动贴附 支持直线与平滑曲线效果 自定义点的显示类型与大小 自适应点的数值显示位置 根据指定锚点…

如何讲好ppt演讲技巧(4篇)

如何讲好ppt演讲技巧&#xff08;4篇&#xff09; 如何讲好PPT演讲技巧&#xff08;四篇&#xff09; **篇&#xff1a;精心准备&#xff0c;奠定演讲基础 一个成功的PPT演讲&#xff0c;离不开精心的准备。首先&#xff0c;要确定演讲的主题和目标&#xff0c;确保演讲内容清…

字典及GitHub字典爬取工具

红队API接口Fuzz字典可以用于WEB安全&#xff0c;渗透测试&#xff0c;SRC等场景 完整文件已上传知识星球&#xff0c;需要的朋友可加入查看。

Docker容器---Harbor私有仓库部署与管理

一、搭建本地私有仓库 1、下载registry镜像 [rootlocalhost ~]#docker pull registry Using default tag: latest latest: Pulling from library/registry 79e9f2f55bf5: Pull complete 0d96da54f60b: Pull complete 5b27040df4a2: Pull complete e2ead8259a04: Pull comp…

OPPO Reno10Pro/Reno11/K10手机强解BL刷root权限KSU内核抓包刷机救砖

OPPO Reno10Pro/Reno11/K10手机虽然发布时间并不久&#xff0c;但由于天玑处理器的体质&#xff0c;已经支持强制解锁BL了&#xff0c;该漏洞来自第三方工具适配&#xff0c;支持OPPO天机8100/8200刷机救砖解锁BL不需要等待官方深度测试直接实现。解锁BL后的OPPO Reno10Pro/Ren…

Android binder死亡通知机制

在Andorid 的binder系统中&#xff0c;当Bn端由于种种原因死亡时&#xff0c;需要通知Bp端&#xff0c;Bp端感知Bn端死亡后&#xff0c;做相应的处理。 使用 Bp需要先注册一个死亡通知&#xff0c;当Bn端死亡时&#xff0c;回调到Bp端。 1&#xff0c;java代码注册死亡通知 …

hadoop学习---基于hive的航空公司客户价值的LRFCM模型案例

案例需求&#xff1a; RFM模型的复习 在客户分类中&#xff0c;RFM模型是一个经典的分类模型&#xff0c;模型利用通用交易环节中最核心的三个维度——最近消费(Recency)、消费频率(Frequency)、消费金额(Monetary)细分客户群体&#xff0c;从而分析不同群体的客户价值。在某些…

C++list的模拟实现

文章目录 一、观察源码二、模拟实现1. 节点结构体2. list类3. 迭代器的定义与实现&#xff08;1&#xff09; 前置--后置--模拟实现&#xff08;2&#xff09; *和->重载模拟实现&#xff08;3&#xff09; 和!重载实现 4. list成员函数模拟实现。&#xff08;1&#xff09;…

Unity Audio Filter 入门

概述&#xff1a; 如果你在你项目中需要一些特殊的声音效果&#xff0c;那这部分声音过滤器的部分一定不要错过喔&#xff0c;让我们来学习这部分的内容吧&#xff01; 这部分理论性比较强&#xff0c;认真看我的注解哈&#xff0c;我尽量解释的易懂一点。 Audio Chorus Filter…

翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习六

合集 ChatGPT 通过图形化的方式来理解 Transformer 架构 翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习一翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深度学习二翻译: 什么是ChatGPT 通过图形化的方式来理解 Transformer 架构 深…