这里写自定义目录标题

第一个界面是mainwindow

mainwindow.cpp中,首先创建计算器按钮的槽函数,在里面创建出第二个界面

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "jsq_jiemian.h"MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow)
{ui->setupUi(this);
}MainWindow::~MainWindow()
{delete ui;
}//点击计算器按钮
void MainWindow::on_pushButton_clicked()
{//创建计算器的界面jsq_jiemian *w=new jsq_jiemian(this);//显示计算器窗口w->show();//隐藏主界面this->hide();}

第二个界面是

ui界面中没有放任何东西,都是纯靠代码写的
第二个界面的.cpp中
1.用代码编写出计算器的界面,包括创建按钮,在按钮上写数字,创建栅格布局

#include "jsq_jiemian.h"
#include "ui_jsq_jiemian.h"
#include <QDebug>jsq_jiemian::jsq_jiemian(QWidget *parent) :QMainWindow(parent),ui(new Ui::jsq_jiemian)
{ui->setupUi(this);//设置整个界面的大小this->setMinimumSize(450,500);this->setMaximumSize(450,500);//界面标签this->setWindowTitle("简易计算器");//创建一个垂直布局,融合到centralwidget中this->vbox = new QVBoxLayout(ui->centralwidget);//创建单行输入框this->lineEdit = new QLineEdit();//设置单行输入长度的最小值this->lineEdit->setMinimumHeight(60);//设置输入方向,从右到左this->lineEdit->setAlignment(Qt::AlignRight);//把创建的输入框与垂直布局关联this->vbox->addWidget(lineEdit);//创建按钮this->buttons = new QPushButton[16];//先创建栅栏空间this->grid = new QGridLayout();//定义一个内容的字符串QString sty = "789+456-123*=0./";for(int i=0;i<4;i++){for(int j=0;j<4;j++){//设置按钮的大小buttons[i*4+j].setSizePolicy(QSizePolicy::Expanding,QSizePolicy::Expanding);//栅栏布局,把组件加到grid->addWidget(buttons+i*4+j,i,j);//设置按钮的标签buttons[i*4+j].setText(sty.at(i*4+j));//建立每个按钮的槽函数//信号的发出者是每个按键,动作是按下,对象是当前界面,槽函数是backconnect(buttons+i*4+j,&QPushButton::clicked,this,&jsq_jiemian::back);}//grid布局和vbox布局进行关联this->vbox->addLayout(grid);//设置返回上一层的按钮 点击7//connect(buttons,&QPushButton::clicked,this,&jsq_jiemian::back);}
}
jsq_jiemian::~jsq_jiemian()
{delete ui;delete vbox;delete lineEdit;delete []this->buttons;delete grid;
}

2.编写函数,计算器的功能

获取信号发送者的信息 sender() 就知道点击了哪一个按钮
然后再强制类型转换static_cast<QPushButton *>(sender()) 强制性转换,获取的是16进制的,转换成QPushButton类型的

void jsq_jiemian::back()
{//强制性转换,获取的是16进制的,转换成QPushButton类型的QPushButton *button = static_cast<QPushButton *>(sender());//获取按钮里面的信息QString ch = button->text();//对获得的数据进行判断//"0123456789."这歌字符串与ch对比,符合字符串中的任何东西,就返回大于等于0的数if (QString("0123456789.").indexOf(ch)>=0){qDebug()<<"输入的数字是:"<<ch;//对数据进行操作(封装成一个函数)InputNum(ch);}else if (QString("+-*/").indexOf(ch)>=0){qDebug()<<"输入的符号是:"<<ch;//对符号进行操作(封装成一个函数)InputType(ch);}else //等于号{qDebug()<<"输入的是等号"<<ch;//对等于号操作(封装成一个函数)Output();}
}

如果输入的是数字

//对数据进行处理
void jsq_jiemian::InputNum(QString ch)
{//标志位,用于区分第一个第二个数据if(flag == 0){//显示获取第一个数据firstnum.append(ch);//把追加的字符ch,加到firstnum后面lineEdit->setText(firstnum);  //显示firstnum}else{//显示获取第二个数据secondnum.append(ch);//把追加的字符ch,加到firstnum后面lineEdit->setText(secondnum);  //显示firstnu}
}

如果输入的是符号

//对符号进行处理
void jsq_jiemian::InputType(QString ch)
{//多个选择的判断switch (ch.at(0).toLatin1())   //"+"============>完整数据“+\0”{case '+':flag=1;break;case '-':flag=2;break;case '*':flag=3;break;case '/':flag=4;break;default:break;}
}

如果输入的是等号

//对等于号进行操作
void jsq_jiemian::Output()
{QString str;switch (flag){//QString()进行字符串的拼接//QString::number()将括号中的内容数值相加case 1:str=QString(firstnum+"+"+secondnum+"="+QString::number(firstnum.toDouble()+secondnum.toDouble()));break;case 2:str=QString(firstnum+"-"+secondnum+"="+QString::number(firstnum.toDouble()-secondnum.toDouble()));break;case 3:str=QString(firstnum+"*"+secondnum+"="+QString::number(firstnum.toDouble()*secondnum.toDouble()));break;case 4:str=QString(firstnum+"/"+secondnum+"="+QString::number(firstnum.toDouble()/secondnum.toDouble()));break;default:break;}//显示结果lineEdit->setText(str);//让标志位变回0flag=0;//清空一下firstnum.clear();secondnum.clear();}

.h中的代码

#ifndef JSQ_JIEMIAN_H
#define JSQ_JIEMIAN_H#include <QMainWindow>#include <QString>
#include <QPushButton>
#include <QLineEdit>
#include <QVBoxLayout>
#include <QHBoxLayout>
#include <QGridLayout>namespace Ui {class jsq_jiemian;
}class jsq_jiemian : public QMainWindow
{Q_OBJECTpublic:explicit jsq_jiemian(QWidget *parent = nullptr);~jsq_jiemian();private slots:void back();private:Ui::jsq_jiemian *ui;QLineEdit *lineEdit;QPushButton *buttons;QGridLayout *grid;QVBoxLayout *vbox;QHBoxLayout *hbox;//对数据进行操作的函数  右键refactor,在.cpp中定义void InputNum(QString ch);//保存第一个和第二次的数据QString firstnum;QString secondnum;//定义标志位int flag = 0;//对符号进行操作的函数  右键refactor,在.cpp中定义void InputType(QString ch);//对等于号=进行操作的函数  右键refactor,在.cpp中定义void Output();};#endif // JSQ_JIEMIAN_H

QT入门(六)——代码创建计算器界面|可以计算的简易计算器|按键的关联相关推荐

  1. java仿windows7计算器界面,java制作仿win7计算器之一计算器的图形界面的设计

    再结合网上各路神人及之前写的博客Swing编程方面步骤,如下: package calPack; import javax.swing.*; import java.awt.*; import jav ...

  2. 基于java平台简易计算器_基于java的简易计算器的设计

    基于java的简易计算器的设计 基于java的简易计算器的设计 摘要 自从java语言诞生以来,java语言就以不可抵挡的趋势很快成为国际上广泛流行的面向对象编程语言,它既具有高级语言的特点,又少了C ...

  3. 第15.12节PyQt(Python+Qt)入门学习:可视化设计界面组件布局详解

    一.引言 在Qt Designer中,在左边部件栏的提供了界面布局相关部件,如图: 可以看到共包含有四种布局部件,分别是垂直布局(Vertical Layout).水平布局(Horizontal La ...

  4. Qt入门(一)——自己动动手写一个简易的用户化界面(Qt命令行模式)

    文章目录 一.编写代码文件 二.生成.pro文件 2.1 进入目录 2.2 生成.pro文件 2.3 修改.pro文件 三.生成makefile文件 四.生成并运行结果 五.附 博主用的Qt是wind ...

  5. [Qt入门]消息对话框创建

    错误对话框: //错误对话框QMessageBox::critical(this,"critical","错误"); 信息对话框: //信息对话框QMessag ...

  6. 计算机计算生命的意义,简易计算器

    做出这个计算器不容易啊,脑细胞都快烧死完了,结合现在的知识,感觉还是蛮有难度的,用到了eval()函数,思维不够开阔,想了那么久还是做出了效果,代码有点多,还是有点小bug,后边更新,先睡上一觉,附上 ...

  7. ...矩阵键盘计算器的C语言,单片机: 简易计算器的实现(键盘)

    利用矩阵键盘实现一个简易的计算器. 为了简化问题,我们假设只支持小于100的非负整数之间的加.减.乘的运算,并且支持连续运算(结果的数值可以再进行运算). 本程序中C为加号,D为减号,E为乘号,F为等 ...

  8. 微型计算机原理课程设计计算器,微机原理课程设计简易计算器的设计.docx

    目录 一前言 ?????????????????????????????? 1 二总体设计 ??????????????????????????? 2 三硬件设计 ?????????????????? ...

  9. android计算器开发报告总结,android简易计算器总结

    一:如图,首先布局计算器主页显示: activity_main.xml xmlns:tools="http://schemas.android.com/tools" android ...

  10. 用python设计一个简单的计算器_Python之实现一个简易计算器 用re

    1 #-*- coding:utf-8 -*- 2 importre3 4 ###############################################清洗,格式化字符串###### ...

最新文章

  1. dp uva1218
  2. Springboot启动原理解析
  3. linux显示没有网卡
  4. 宜搭小技巧|维护Excel太麻烦?Excel一键转应用,为你的工作减负
  5. 计算机视觉专业要学什么课程,[08本]“计算机视觉基础”课程介绍和课件
  6. 最方便的字符设备驱动的写法
  7. java开发的windows程序工作机制_Windows程序运行原理及程序编写流程
  8. kvm虚拟机_关于虚拟机管理KVM,基本操作都在这里,懒人必备,拿去收藏
  9. CTF常见用法小总结
  10. 最小二乘支持向量机(LSSVM)推导
  11. 这5个开源和免费静态代码分析工具,你一个都没有用过吗?不会吧
  12. 德芙网络营销策略ppt_德芙网络营销案例ppt采集
  13. 加密项目必修科目:代币经济学
  14. mvc html禁用文本框,如何在MVC htmlAttribute中設置禁用
  15. linux学习随手笔记
  16. 实验1 Bean管理
  17. 知乎:电脑长时间不关机会缩短电脑寿命吗?
  18. 编辑PDF文档内容有哪些方法
  19. 变量值互换自定义函数swap()的使用
  20. Ubuntu折腾--优化wine 微信小黑框处理

热门文章

  1. Mybatis日志实现
  2. android studio 中 Cannot resolve symbol 'R'(XXX) 如何解决
  3. python脚本批量登录crt_python批量修改SecureCRT会话密码-阿里云开发者社区
  4. JavaScript·函数
  5. GitHub 向别人的仓库贡献代码
  6. C#反射获取 所有字段 及 私有字段
  7. http虚拟主机的简单配置训练
  8. 《网络对抗》 逆向及Bof基础实践
  9. C++中引用变量的探究
  10. 青蛙跳台阶(剑指 Offer 10- II)