Qt下的简易计算器项目

Qt是一个比较强大的跨平台软件,首次认真学习Qt就拿计算机项目来入门。

在Qt中创建好项目,在设计模式下利用Qt的表格布局,设计好界面

其中可以利用样式表改动界面属性

利用Qt中的信号与槽编写功能程序

  1 #include "mainwindow.h"
  2 #include "ui_mainwindow.h"
  3
  4 MainWindow::MainWindow(QWidget *parent) :
  5     QMainWindow(parent),
  6     ui(new Ui::MainWindow)
  7 {
  8     ui->setupUi(this);
  9     //this->setWindowFlags(this->windowFlags() | Qt::FramelessWindowHint);
 10     setFixedSize(356,428);
 11
 12     connect(ui->b_0,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 13     connect(ui->b_1,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 14     connect(ui->b_2,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 15     connect(ui->b_3,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 16     connect(ui->b_4,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 17     connect(ui->b_5,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 18     connect(ui->b_6,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 19     connect(ui->b_7,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 20     connect(ui->b_8,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 21     connect(ui->b_9,SIGNAL(clicked()),this,SLOT(handleNumClick()));
 22
 23     connect(ui->b_div,SIGNAL(clicked()),this,SLOT(handleOpeClick()));
 24     connect(ui->b_mod,SIGNAL(clicked()),this,SLOT(handleOpeClick()));
 25     connect(ui->b_multi,SIGNAL(clicked()),this,SLOT(handleOpeClick()));
 26     connect(ui->b_plus,SIGNAL(clicked()),this,SLOT(handleOpeClick()));
 27     connect(ui->b_sub,SIGNAL(clicked()),this,SLOT(handleOpeClick()));
 28
 29     connect(ui->b_dot,SIGNAL(clicked()),this,SLOT(handleDotClick()));
 30     connect(ui->b_clear,SIGNAL(clicked()),this,SLOT(handleClearClick()));
 31     connect(ui->b_signed,SIGNAL(clicked()),this,SLOT(handleSignedClick()));
 32
 33     connect(ui->b_equ,SIGNAL(clicked()),this,SLOT(handleEquClick()));
 34     m_ope1="0";
 35     m_ope2="0";
 36     m_result="0";
 37     m_step=0;
 38     m_type=0;
 39 }
 40
 41 void MainWindow::handleClearClick()
 42 {
 43     m_ope1="0";
 44     m_ope2="0";
 45     m_result="0";
 46     m_step=0;
 47     m_type=0;
 48     ui->l_result->setText(m_result);
 49 }
 50
 51 void MainWindow::handleDotClick()
 52 {
 53     if(m_step==0)
 54     {
 55         m_ope1+=".";
 56         ui->l_result->setText(m_ope1);
 57     }
 58     else
 59     {
 60         m_ope2+=".";
 61         ui->l_result->setText(m_ope2);
 62     }
 63 }
 64
 65 void MainWindow::handleNumClick()
 66 {
 67     QObject *tmpObj=sender();  //定义一个指向发送信号的对象的指针
 68     QString tmpStr=tmpObj->objectName();//获取发送信号的对象的名字
 69     tmpStr=tmpStr.remove("b_");//去除b_,这样得到的是数字按钮代表的数字
 70     if(m_step==0)
 71     {
 72         if(m_ope1 =="0")
 73         {
 74             m_ope1=tmpStr;
 75         }
 76         else
 77         {    m_ope1+=tmpStr;}
 78         ui->l_result->setText(m_ope1);
 79     }
 80     else
 81     {
 82         if(m_ope2 =="0")
 83         {
 84             m_ope2=tmpStr;
 85         }
 86         else
 87         {    m_ope2+=tmpStr;}
 88         ui->l_result->setText(m_ope2);
 89     }
 90
 91 }
 92
 93 void MainWindow::handleEquClick()
 94 {
 95     double ope1,ope2;
 96     ope1=m_ope1.toDouble(); //Qstring类型转double类型
 97     ope2=m_ope2.toDouble();
 98     double tmpResult;
 99     switch(m_type)
100     {
101     case 0:
102         tmpResult=ope1+ope2;
103         break;
104     case 1:
105         tmpResult=ope1-ope2;
106         break;
107     case 2:
108         tmpResult=ope1*ope2;
109         break;
110     case 3:
111         tmpResult=ope1/ope2;break;
112     case 4:
113         if(!m_ope1.contains(".")&&!m_ope2.contains("."))
114             tmpResult=(int)ope1%(int)ope2;
115         break;
116
117     }
118     m_result=QString::number(tmpResult); //double类型转Qstring类型
119     ui->l_result->setText(m_result);
120     m_ope1="0";
121     m_ope2="0";
122     m_result="0";
123     m_step=0;
124     m_type=0;
125 }
126
127 void MainWindow::handleOpeClick()
128 {
129     m_step=1;
130     QObject *tmpObj=sender();
131     QString tmpStr=tmpObj->objectName();
132     if(tmpStr=="b_plus")
133     {
134         m_type=0;
135
136     } if(tmpStr=="b_sub")
137     {
138         m_type=1;
139     } if(tmpStr=="b_multi")
140     {
141         m_type=2;
142     } if(tmpStr=="b_div")
143     {
144         m_type=3;
145     }
146     if(tmpStr=="b_mod")
147     {
148         m_type=4;
149     }
150 }
151
152 void MainWindow::handleSignedClick()
153 {
154     if(m_step==0)
155     {
156         if(m_ope1[0]==‘-‘)
157             m_ope1=m_ope1.remove("-");
158         else
159         {m_ope1=m_ope1.insert(0,"-");}
160         ui->l_result->setText(m_ope1);
161     }else
162     {
163         if(m_ope2[0]==‘-‘)
164             m_ope2=m_ope2.remove("-");
165         else
166         {m_ope2=m_ope2.insert(0,"-");}
167          ui->l_result->setText(m_ope2);
168     }
169
170 }
171
172 MainWindow::~MainWindow()
173 {
174     delete ui;
175 }

最终得到结果

时间: 2024-12-28 16:36:19

Qt下的简易计算器项目的相关文章

C语言下的简易计算器

1 #include <stdio.h> 2 #include <math.h> 3 int main() 4 { 5 double data1, data2; 6 char op; 7 while (3 == scanf("%lf%c%lf", &data1, &op, &data2) ) 8 { 9 double result; 10 printf("%lf%c%lf=", data1,data2); 11 swi

初学iOS开发之简易计算器

今天学了下一个简易计算器,自己做时遇到了忘记把textfield代理给View Controller,导致按回车键时不能自动跳转到下一行输入,具体代理如下图所示. 在此步骤后,在ViewController.h添加<UITextfieldDelegate>具体添加如下图. 在添加代理模式后,在ViewController.m 添加下面的代码,就可以实现输入完后按回车键换行.

第一个Android项目--简易计算器的设计与实现

这个简易计算器的实现我是参照慕课网上的视频课程学习的,下面梳理我的开发过程以及DEBUG 在这个项目中实现计算器的第一步骤是对界面UI的设计,UI的设计并不难,一个总的Lnearlayout的布局下orientation设置为vertical垂直分布,然后此布局下再设置1给我Edittext的一个文本框4个Lnearlayout子布局(第4个布局里可以嵌套另外3个Lnearlayout的布局来实现按钮排版)这4个子布局在你的界面上肯定是垂直分布的,因为你的总布局设置vertical.第一个子布局

项目——简易计算器

2017.12.21 决定做一个小项目来练练手了,对期末考试感到无所畏惧. 先选择简易计算器吧,核心算法中缀转后缀表达式我还是学过的,最起码能克服一点心里畏惧. 项目预期如下: 实现命令行版本的核心算法,做简单的加减乘除就可以了: 实现图形化窗口. 代码预期要200行以上. 对自己提一个要求:可以上网找思路,但是绝对不看别人的源码. 2017.12.23 经过几天的努力,总算把这个计算器的核心代码写出来了.代码接近200行,主要利用二重字符串来实现核心的逆波兰算法,实在是有点繁杂. 这段代码实在

制作一个简易计算器——基于Android Studio实现

一个计算器Android程序的源码部分分为主干和细节两部分. 一.主干 1. 主干的构成 计算器的布局 事件(即计算器上的按钮.文本框)监听 实现计算 2. 详细解释 假设我们的项目名为Calculator,而布局名称(Layout Name)为默认的activity_main .即设置如下图所示: 在这种前提下,有: 设置计算器布局的文件:Calculator/app/src/main/res/layout/activity_main.xml 事件监听和计算实现在同一个文件里:Calculat

C#Windows Form简易计算器实现(上)

第一次写博客,来分享一个简易计算器的代码.作为一名准程序员,就是要多写代码才能孰能生巧.重视基础知识才能飞的更快更高以及更稳. 代码可能会写的很糟糕,不完美不安全之处希望发现的越多越好 c#编写计算器带窗口的,对于新手来说是如何建立窗体以及实现按钮的响应事件吧!那么,首先来探索下窗口是怎么实现的吧! 步骤1:新建项目→C#windows窗体应用程序→新建解决方案 此时你会发现有两个名称,一个是解决方案名称,一个是项目名称.对于小程序来说其实没什么区别.但对于大点的程序最好就要区别开了.解决方案就

C++.NET的简易计算器的制作

计算器的制作需要实现一下几个功能:加减乘除,连续计算,重复计算. 加减乘除就是简单的二元运算,连续计算就是不使用等号连续进行几次二元运算,重复计算就是进行一次二元运算之后再次单击等号可以将之前的运算再次进行一次. 由于是C++的窗体程序,所以先设计出窗体的界面.界面如下. 需要注意的是,上面的两个显示框用的是TextBox,其余的均是Button. 窗体的FormBorderStyle属性应改成FixedSingle或其他,不能用None,这个样子计算器窗体框的大小就是固定不可变的. Maxim

基于mini2440简易计算器

基于mini2440简易计算器使用的是数组实现,并非逆波兰式,因此功能不够强大,仅供驱动学习,以及C语言基础编程学习之用.有时间读者可以用逆波兰式来实现强大功能计算器,原理也很简单,建议读<c程序设计第二版>里面有算法的代码.读者自行研究.此程序基于电子相册的改进,触摸屏,LCD,字符现实,数字输入等等 mini2440  索尼X35   LCD液晶屏 主函数部分: #include "def.h" #include "option.h" #includ

delphi中formatFloat代码初探(在qt下实现floatformat的函数)

由于项目需要,需要在qt下实现floatformat的函数.之前写过一个,但是写得不好.决定重新写一个,参考delphi xe2下的实现.把xe2下的相关代码都看了一遍,xe2的代码思路在这里贴出来.xe2下的代码在system.sysutils下,核心函数是InternalFloatToTextFmt.它有汇编的版本跟纯pascal的版本.汇编看不懂,参考的是纯pascal的版本. 整体流程是: 1)解析format格式化字符串 [delphi] view plain copy Result