这个小项目主要练习qt的控件布局,就只用两个控件就可以做出来了,pushButton和textEdit这两个控件,当然你想搞个标准计算器和科学计算器的话,也可以加个tabWidget或者ToolBox控件来切换界面。

一 界面布局

上面我就是用了TabWidget这个控件来做切换模式,这个控件的学习心得我之前也有写了一点点,可以去看看TabWidget。

整体布局,首先对tabwidget布局,这个就不管是什么布局都行,在widget里面的下一级(儿子)就它一个;

然后对tabwidget里面布局,我是参考了win10自带的计算器来做的界面,所以上方部分就是输出结果,中间是特殊运算,就单独搞了一排水平的布局,下面就是基本的输入建按钮了,整体有一个栅格布局,然后里面有五个水平布局嵌套就行了。

注:我布局的一些心得,就是从最小级开始布局,然后慢慢往外布局,就比如这个计算器,我最先布局的是下方的5排按钮,就是先拉5个按钮出来,对五个按钮水平布局,这样就有一排出来了,然后就是复制这一排,搞到了5排按钮,就对这5排按钮进行栅格或者垂直布局,那么下方的部分就做好了。

在布局里面会默认有间隔的,可以取消或者减小这些间隔。默认上下左右距离边框有个9像素点的间隔吧,然后中间的控件之间有6个像素点。都不想要的话,就跟我一样全部搞为零。就加粗字体的6个。

还有一点就是布局的占比问题,这里之前也有写过了,sizeHint的返回值 sizePolicy布局,就是这个,也不说了。

二 代码设计

这部分其实主要就是信号与槽的运用了,基本都是按钮的点击信号。所以,就将全部的按钮添加clicked()信号槽函数就行了。

按钮的信息获取,主要用按钮的text()函数就行了;然后实时得将按了的数字添加到textEdit框里面去,就用textEdit的setText()函数。就那一个按钮的例子就够了吧。

/*m_enter保存输入的数据,s_btn_0是数字0的按钮,s_edit文本框,m_type保存的是加减乘除*/
m_enter.append(ui->s_btn_0->text());
if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}
ui->s_edit->setText(m_enter);

加减乘除的话,定义了两个保存数据的变量,还有一个运算类型的变量。

下面是减法的运算符,先保存运算符 “- ” , 然后 append是追加到文本框里面,自动换一行追加显示,按了运算符之后,之前的数字也要保存吧,m_enter就是旧的数字了,所以赋值一下,然后清空m_enter的字符串,因为上面那些数字按钮我是用追加的形式添加的。

最后就是等于号 = 了,要知道运算符是什么类型,是加是减?这里有字符串和double类型的互相转换。如果你想得到的结果还能继续运算,就要将结果的数字给到保存当前数字的变量m_enter。

三 优化

还有一些按钮就不说了,有点多,放上源码你们看吧,然后我这只实现了标准那个界面的功能,科学计算器没有做,按键太多了。还有一些值得去优化的地方,比如做个查看历史纪录,代码部分可以在将重复的地方封装函数等等。

四 源码

void Widget::on_s_btn_0_clicked()
{m_enter.append(ui->s_btn_0->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_1_clicked()
{m_enter.append(ui->s_btn_1->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_2_clicked()
{m_enter.append(ui->s_btn_2->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_3_clicked()
{m_enter.append(ui->s_btn_3->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_4_clicked()
{m_enter.append(ui->s_btn_4->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_5_clicked()
{m_enter.append(ui->s_btn_5->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_6_clicked()
{m_enter.append(ui->s_btn_6->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_7_clicked()
{m_enter.append(ui->s_btn_7->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_8_clicked()
{m_enter.append(ui->s_btn_8->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_9_clicked()
{m_enter.append(ui->s_btn_9->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_point_clicked()
{m_enter.append(ui->s_btn_point->text());if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_equal_clicked()
{double result;if(m_type == "+")result = m_old_enter.toDouble() + m_enter.toDouble();if(m_type == "-")result = m_old_enter.toDouble() - m_enter.toDouble();if(m_type == "*")result = m_old_enter.toDouble() * m_enter.toDouble();if(m_type == "/")result = m_old_enter.toDouble() / m_enter.toDouble();if(m_type == "%")result = m_old_enter.toLongLong() % m_enter.toLongLong();ui->s_edit->append(QString::number(result));m_enter = QString::number(result);m_old_enter = "0";m_type.clear();
}void Widget::on_s_btn_subt_clicked()
{m_type = ui->s_btn_subt->text();ui->s_edit->append(m_type);m_old_enter = m_enter;m_enter.clear();
}void Widget::on_s_btn_add_clicked()
{m_type = ui->s_btn_add->text();ui->s_edit->append(m_type);m_old_enter = m_enter;m_enter.clear();
}void Widget::on_s_btn_mult_clicked()
{m_type = ui->s_btn_mult->text();ui->s_edit->append(m_type);m_old_enter = m_enter;m_enter.clear();
}void Widget::on_s_btn_divide_clicked()
{m_type = ui->s_btn_divide->text();ui->s_edit->append(m_type);m_old_enter = m_enter;m_enter.clear();
}void Widget::on_s_btn_delete_clicked()
{if(m_enter.isEmpty())return;m_enter.remove(-1,1);if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(m_enter);return;}ui->s_edit->setText(m_enter);
}void Widget::on_s_btn_clear_clicked()
{m_enter.clear();m_old_enter = "0";m_type.clear();ui->s_edit->clear();
}void Widget::on_s_btn_CE_clicked()
{m_enter.clear();ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);
}void Widget::on_s_btn_rev_clicked()
{double num = m_enter.toDouble();num = 0 - num;if(!m_type.isEmpty()){ui->s_edit->setText(m_old_enter);ui->s_edit->append(m_type);ui->s_edit->append(QString::number(num));return;}ui->s_edit->setText(QString::number(num));m_enter = QString::number(num);
}void Widget::on_s_btn_rem_clicked()
{m_type = ui->s_btn_rem->text();ui->s_edit->append(m_type);m_old_enter = m_enter;m_enter.clear();
}void Widget::on_s_btn_radix_clicked()
{double num = sqrt(m_enter.toDouble());ui->s_edit->append(QString::number(num));m_enter = QString::number(num);m_old_enter = "0";m_type.clear();
}void Widget::on_s_btn_square_clicked()
{m_old_enter = m_enter;m_type = "*";on_s_btn_equal_clicked();
}void Widget::on_s_btn_rec_clicked()
{m_old_enter = "1";m_type = "/";on_s_btn_equal_clicked();
}

Qt 做个简易的计算器,加减乘除平方开根相关推荐

  1. js计算器代码加减乘除_如何用jQuery做一个简易版计算器

    经过几个小时地敲敲打打,终于把这一部分的代码完成了. 这类问题的难点不在于布局,而是如何恰当地使用jQuery达成计算.交互的目的,比如储存.显示数值,数据类型的转换等. 在听老师讲课之前的我,思路是 ...

  2. 使用Python中内置tkinter模块做一个简易的计算器

    当前环境: windows + python3.7 + tkinter 模块 一.总体规划 1.需要用到的模块有  tkinter 2.tkinter 模块中需要用到的知识点有: 2.1.创建主窗口 ...

  3. [JavaScript学习记录] 首次运用于网页,做一个简易利息计算器!!!

    目录 事件 错误处理 1.隐藏/显示文字 2.简单的加法计算器 效果: ★★★3.简易利息计算器 效果: ​​​​​​​ 事件 javascript允许html与用户交互的行为 例如:鼠标点击事件 & ...

  4. qt实现一个简易的计算器

    一.下载qt 下载地址:http://download.qt.io/archive/qt/ 下载安装教程:https://blog.csdn.net/cfan927/article/details/9 ...

  5. 用Qt做个简易的数据分析界面

    文章目录 导读 前期准备 优先确认界面(概要设计) 确认复用关系(详细设计) 开始编码 不怎么需要注意的注意事项 绝对要注意的注意事项 获取屏幕分辨率时很细节的一个片段 结构概述 基础配置类 最初的父 ...

  6. python 做一个简单的计算器

    python:做一个简易的计算器(加减乘除,重复使用) 第一种方法 def jisuanqi(): #实现加减乘除运算a, b, c=shuru()if c == "+":z = ...

  7. (含完整代码)简易Android计算器的实现

    文章结构 1.项目要求 2.实现思路 3.代码实现 主文件 子文件 4.效果预览 1.项目要求 其实老师的要求就是做一个简易的计算器,有两个文本框,一个按钮,然后实现加法即可. 但是我还是想做一个比较 ...

  8. 使用Qt做一个简单计算器

    title: Calculator date: 2022-09-04 11:10:12 tags: [Qt, 应用, C++] typora-root-url: Calculator 使用Qt做一个简 ...

  9. QT入门项目--简易计算器

    QT入门项目–简易计算器 目录 QT入门项目--简易计算器 一.前言 二.运行界面 三.代码 dialog.cpp doexpr.cpp check.cpp 四.总结 一.前言 C语言快要结课了,自然 ...

最新文章

  1. sliva数据库简介--转载
  2. windows10下编译dllib报错: ERROR: Failed building wheel for dlib
  3. Xiotech任命新CEO EMC又少一员大将
  4. 同级选择器_基础选择器
  5. ITK:创建一个索引
  6. 运维大数据可视化分析平台来了,枯燥运维数据也可以生动起来
  7. 如何处理Java注释
  8. windows phone 学习(4)
  9. 【linux】Linux配置环境变量
  10. unef螺纹_PT螺纹,NPT螺纹,G螺纹,公制螺纹的区别
  11. MikroTik RouterOS电子克隆盘原理收集
  12. Spring集合类型依赖查找
  13. Android 系统服务列表
  14. oracle操作字符串:拼接、替换、截取、查找、长度、判断
  15. 密码需要带特殊字符(二)
  16. 关于北京工作居住证相关问题
  17. 腾讯视频 Node.js 服务是如何支撑国庆阅兵直播高并发的?
  18. linux 服务器访问限制,Linux中限制用户访问权限的3种方法
  19. e几个灯同时亮灭两次verilog_第7章Verilog设计的层次与风格.PPT.ppt
  20. PMSM FOC 滑膜观测器 SMO 算法

热门文章

  1. Hexo-fluid主题添加51LA统计
  2. opencv 轮廓放大_【走进OpenCV】这样腐蚀下来让我膨胀!
  3. PMBOK(项目管理实践指南)绝不是PMP考试的指定教材,看完你就知道
  4. 5个开源免费的Java项目快速开发脚手架
  5. 51单片机控制舵机,舵机不动的定时器原因
  6. 题目 2214: 快速排序
  7. 聚焦运营商信创运维,美信时代监控易四大亮点值得一试!
  8. 分水岭:知识的深度拓展
  9. Jenkins 管理员 admin 密码找回
  10. border-radius简介