嵌入式系统之基于QT的简单计算器

合集下载

基于Qt的计算器设计

基于Qt的计算器设计

衡阳师范学院嵌入式系统课程设计题目:基于Qt的计算器设计作者姓名:陈明慧、龚秋弘、宋素梅、关妹学号:所在院系:计算机学院专业:计算机科学与技术(师范)指导老师:***2018年7月目录摘要 (3)一、总体设计方案 (4)二、功能模块 (5)1. 基本计算功能: (5)2. 辅助功能 (5)3. 数字存储 (5)三.详细设计: (6)1. 基本计算功能: (6)2. 辅助功能 (9)三、功能验证及运行结果 (12)3.1基本加减乘除: (12)3.2复杂操作 (14)四、总结: (15)五、参考资料: (15)基于Qt的计算器设计摘要当今社会是信息社会,科技经济高速发展的社会,为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。

然而,电脑已经成为当代人生活的必需品,运行在电脑上的计算器成为了人们的生活学习绝佳伴侣。

本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器,并实现了一定的计算功能。

关键字:Qt C++ 计算器一、总体设计方案1.目标:基于Qt用C++编写计算器程序,仿照window7计算器,实现两数加减乘除,平方,倒数,开方运算。

2.运行环境:编写环境:Qt 5.3.0 windows64位Exe 运行:windows 103.功能描述:a.基于Qt设计计算器的ui界面。

b.编写的应用程序实现如下功能:(1)加减乘除,平方,倒数,开方(2)存储和显示之前的运行结果(3)实现清屏,退格,退出应用程序的功能c. 应用程序为exe工程建立:文件->新建文件和工程->QtwidgetsApplication包含mainwindow.uid. ui界面设计: 在QT设计器中布置好计算器界面,所有按键采用pushButton控件,显示计算结果采用的是BrowerEdit控件。

完成的界面如下图所示:二、功能模块1. 基本计算功能:1.导数运算:btnReciprocal()2.开平方运算:btnSqrtSlot()3.取反运算:btnNegateSlot()4.基本加减乘除及百分号运算:btnEquSlot()2. 辅助功能1.显示框初始化setExp()2.复位btnClearSlot()3.删除当前框里的运算数:btnClearErrorSlot()4. 退格btnBackSLot()3. 数字存储1.内存清零btnMemoryClearSlot()2.读内存btnMemoryReadSlot()3.保存内存btnMemorySaveSlot()4.累加和累减btnMemoryAddSlot()和btnMemorySubSlot()三.详细设计:1. 基本计算功能:1.导数运算:btnReciprocal()1void MainWindow::btnReciprocal()2{3if(!cur.isEmpty())4stk.push(cur);5exp="1/"+stk.top();6bool ok;7qreal t2=stk.top().toDouble(&ok);8qint64t1=stk.top().toLongLong(&ok);9stk.pop();10QString res;11if(ok)res=QString::number(double(1/(1.0*t1))); 12else res=QString::number(double(1/t2));13stk.push(res);14cur="";15showNumber(exp,res);16}2.开平方运算:btnSqrtSlot()3.取反运算:btnNegateSlot()4.基本加减乘除及百分号运算:btnEquSlot()2. 辅助功能1.显示框初始化setExp()2.复位btnClearSlot()3.删除当前框里的运算数:btnClearErrorSlot()4. 退格btnBackSLot()3. 数字存储1.内存清零btnMemoryClearSlot()2.读内存btnMemoryReadSlot()3.保存内存btnMemorySaveSlot()4.累加和累减btnMemoryAddSlot()和btnMemorySubSlot() //累加三、功能验证及运行结果3.1基本加减乘除:3.1.1加法3.1.2减法3.1.3乘法3.1.4除法除数为零时:除数非零时:3.1.5 %操作3.2复杂操作3.2.1倒数运算3.2.2开平方操作四、总结:1.通过计算器设计,我学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。

Qt实现计算器

Qt实现计算器
public:
myWidget(){
Q1="0";
Q2="0";
Q3="0";
c=' ';
this->setMinimumSize(300,290);
this->setMaximumSize(300,290);
QWidget *editwindow=new QWidget(this);//编辑窗口
editwindow->setGeometry(40,20,220,50);
{
if(Q2=="0") Q2="2";
else
{
Q2=lineEdit->text();
Q2.append('2');
}
lineEdit->setText(Q2);
}
void s3()
{
if(Q2=="0") Q2="3";
else
{
Q2=lineEdit->text();
Q2.append('3');
lineEdit=new QLineEdit("欢迎使用就算器",editwindow);//显示输入框
lineEdit->setGeometry(0,0,220,50);
lineEdit->setReadOnly(1);//设置为只读,不允许直接修改文本框
QWidget *buttonwindow=new QWidget(this);
connect(b7,SIGNAL(clicked()),this,SLOT(s7()));

任务5:基于QT的计算器设计

任务5:基于QT的计算器设计
码:(5、6、7、8、9、0几个键可自行增加)
一:计算器设计
一:计算器设计
6、CLR键增加click信号,对应slot的代码如下:
ui->m_x->setText(“”); ui->m_y->setText(“”); ui->m_result-setText(“”); 7、EXIT键增加click信号,对应slot的代码如下: Close(); 8、按运行键,即可实现相应的功能。
二:编译ARM版本的程序
1、在Projectsr Build Settings中选择Embedded
Qt4.。
如下图所示。
二:编译ARM版本的程序
2、传至实训台中运行。
END
所示。
一:计算器设计
1、
一:计算器设计
3、在等于按键上增加click槽,代码如下:
一:计算器设计
4、在m_x,m_y二个框中,增加lostFocus()槽,在增加代码
前,先定义全局bool型变量x_selected和y_selected,再增 加如下代码:
一:计算器设计
5、在每个数字按键上增加click槽,分别增加如下代
任务5:基于QT的计算器设计
主要内容
计算器设计 编译ARM版本的程序
一:计算器设计
1、新建项目
2、在新建的项目中,根据屏幕尺寸(800×480),
设定Forms的大小,然后根据下图把各个控件加入,
第一个输入框是QLineEdit,第二个也是输入框是 QLineEdit,第三个也是输入框是QLineEdit,对象 名称分别为m_x,m_y,m_result。“+”为Label, 其余的均为QPushButton,类和对象名分别如下图

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于Q T的简单计算器The pony was revised in January 2021嵌入式系统课程设计报告题目:基于QT的简单计算器专业:计算机科学与技术班级:姓名:学号:指导老师:日期:2012-12-26第一章前言设计背景计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。

设计目的本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。

通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。

第二章功能需求分析功能描述本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算。

由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。

第三章开发工具简介QT简介由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT 开发工具的背景。

Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。

C++基于Qt图形库的简易计算器程序

C++基于Qt图形库的简易计算器程序

Calculate.cpp 文件
/************************************************************ APP : 四则运算计算器 Author : Input : NULL Output : NULL Date : 2015/04/16 ************************************************************/
button_add = new QPushButton(this); button_add->setText(tr("+")); button_add->setFont(_font); button_add->setGeometry(228,50,50,40); QObject::connect(button_add,SIGNAL(clicked()),this,SLOT(click_add())); button_4 = new QPushButton(this); button_4->setText(tr("4")); button_4->setFont(_font); button_4->setGeometry(6,114,50,40); QObject::connect(button_4,SIGNAL(clicked()),this,SLOT(click_4())); button_5 = new QPushButton(this); button_5->setText(tr("5")); button_5->setFont(_font); button_5->setGeometry(80,114,50,40); QObject::connect(button_5,SIGNAL(clicked()),this,SLOT(click_5())); button_6 = new QPushButton(this); button_6->setText(tr("6")); button_6->setFont(_font); button_6->setGeometry(154,114,50,40); QObject::connect(button_6,SIGNAL(clicked()),this,SLOT(click_6())); button_sub = new QPushButton(this); button_sub->setText(tr("-")); button_sub->setFont(_font); button_sub->setGeometry(228,114,50,40); QObject::connect(button_sub,SIGNAL(clicked()),this,SLOT(click_sub())); button_7 = new QPushButton(this); button_7->setText(tr("7")); button_7->setFont(_font); button_7->setGeometry(6,178,50,40); QObject::connect(button_7,SIGNAL(clicked()),this,SLOT(click_7())); button_8 = new QPushButton(this); button_8->setText(tr("8")); button_8->setFont(_font); button_8->setGeometry(80,178,50,40); QObject::connect(button_8,SIGNAL(clicked()),this,SLOT(click_8())); button_9 = new QPushButton(this); button_9->setText(tr("9"));

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于QT的简单计算器

嵌入式系统之基于QT的简单计算器QT是一种跨平台的应用程序开发框架,它提供了一种编写图形用户界面(GUI)程序的简便方法。

在嵌入式系统中,使用QT可以快速开发出各种功能强大、界面友好的应用程序。

对于一个简单计算器来说,主要包括用户界面设计和计算逻辑两部分。

首先,我们需要设计一个界面来展示计算器的按钮和显示结果的区域。

在QT中,可以使用QGridLayout布局管理器来创建按钮布局,同时将其连接到对应的信号槽函数上,以实现按钮的点击响应。

```cpp//main.qmlimport QtQuick 2.12import QtQuick.Window 2.12import QtQuick.Controls 2.12Windowvisible: truewidth: 400height: 600title: "Simple Calculator"RowLayoutspacing: 10GridLayoutid: buttonGridrows: 4columns: 4anchors.horizontalCenter: parent.horizontalCenter anchors.verticalCenter: parent.verticalCenter Buttontext: "7"onClicked: calculator.append("7")}Buttontext: "8"onClicked: calculator.append("8")}// ... more buttons ...Buttontext: "="onClicked: calculator.calculate}// ... more buttons ...}TextFieldid: resultFieldwidth: 200height: 50placeholderText: "0"readOnly: true}}```在这个示例中,我们使用了QT的QML语言来创建用户界面。

任务5基于QT的计算器设计

任务5基于QT的计算器设计

任务5基于QT的计算器设计计算器一直以来都是人们日常生活中不可或缺的工具之一、在计算器的设计中,我们既要考虑到功能的实现,也要注重用户界面的友好性和操作的便捷性。

而QT作为一种跨平台的GUI应用框架,提供了丰富的工具和组件,使得计算器的开发变得更加方便和快捷。

在设计基于QT的计算器时,需要分析要实现的功能,确定用户界面的布局和组件的选择。

下面将详细介绍如何使用QT设计一个功能完备、外观美观的计算器。

首先需要确定计算器的基本功能,如四则运算、括号运算、正负数运算等。

然后进行界面布局的设计。

QT提供了丰富的布局管理器,可以根据实际需要选择合适的布局方式。

在计算器设计中,通常使用的是网格布局,方便将按钮等组件进行排列。

在QT中,可以使用QPushButton组件来作为计算器的按钮,使用QLineEdit组件来显示计算结果。

另外,几个常用的功能按钮,如清除按钮、等号按钮等,可以直接使用QT提供的控件。

每个按钮通过信号和槽机制与计算器的功能函数进行连接,实现对应的功能。

接下来我们开始设计计算器的主界面。

打开QT Creator,选择创建新的QT Widgets应用程序项目。

在UI设计器中拖拽QPushButton组件来作为计算器的数字按钮,将QLineEdit组件作为计算结果显示框。

然后使用网格布局将这些按钮和显示框进行排列。

先设计一个简单的计算器,支持四则运算和正负数运算功能。

在UI 设计器中布局好按钮后,设置每个按钮的文本为对应的数字或符号,并将它们的槽函数与计算器实现的相应函数进行连接。

在计算器实现中,可以使用QStack来实现对括号的匹配和计算的过程。

对于四则运算,可以使用逆波兰表达式来实现,即将中缀表达式转换为后缀表达式,然后再进行求值。

在计算器类中,可以设计一个函数来将用户输入的表达式转换为逆波兰表达式,再利用栈来进行求值。

对于括号运算,可以使用递归的方式来实现。

首先找到最内层的括号,将它们的值计算出来,然后将计算结果替换成新的表达式,再进行下一轮的计算,直到没有括号为止。

qt编程简单的计算器

qt编程简单的计算器

QT编程实现简易的计算器一、实验目的1) 熟悉QtCreator的简单操作。

2) 了解Qt程序编写框架。

3) 了解信号和槽机制,熟练掌握信号与槽在应用程序中的使用。

二、实验内容1) 查看API手册,学习简单的Qt类的使用,如QLineEdit、QPushButton等。

2) 用QtCreator创建工程,用Qt编写计算器程序。

3) 对计算器程序进行移植。

三、实验步骤1. 创建工程1) 打开QtCreator,如图1所示。

选择File->New File or Project,然后在弹出的对话框中选择Other Project->Empty Qt project (如图2所示),然后进入下一步。

选择Qt版本,这里选择使用Qt4.7.1,取消对Qt in PA TH的选择(如图4所示),然后进入下一步,完成新工程的创建(如图5所示)。

实现代码Calcuulator.h代码:#ifndef CALCULATOR_H#define CALCULATOR_H#include<QApplication>#include<QDialog>#include<QPushButton>#include<QLineEdit>class Calculator:public QDialog {Q_OBJECT protected:QLineEdit *lineEditor; QPushButton *button_0; QPushButton *button_1; QPushButton *button_2; QPushButton *button_3; QPushButton *button_4; QPushButton *button_5; QPushButton *button_6; QPushButton *button_7; QPushButton *button_8; QPushButton *button_9; QPushButton *button_ce; QPushButton *button_jia; QPushButton *button_jian; QPushButton *button_cheng; QPushButton *button_chu; QPushButton *button__; QPushButton *button_dengyu; int num1,num2,result; // bool zhenghao; //int mark; //char fuhao; //QString S; //public:Calculator();private slots:void button_0_clicked();void button_1_clicked();void button_2_clicked();void button_3_clicked();void button_4_clicked();void button_5_clicked();void button_6_clicked();void button_7_clicked();void button_8_clicked();void button_9_clicked();void button_ce_clicked();void button_jia_clicked();void button_jian_clicked();void button_cheng_clicked();void button_chu_clicked();void button__clicked();void button_dengyu_clicked(); };#endif // CALCULATOR_HCalculator.cpp代码:#include<QLayout>#include<QHBoxLayout>#include<QVBoxLayout>#include<QLineEdit>#include<cmath>#include"calculator.h"Calculator::Calculator(){num1=0;num2=0;result=0;zhenghao=true;mark=1;lineEditor=new QLineEdit("0");S="";button_0=new QPushButton("0");button_1=new QPushButton("1");button_2=new QPushButton("2");button_3=new QPushButton("3");button_4=new QPushButton("4");button_5=new QPushButton("5"); button_6=new QPushButton("6"); button_7=new QPushButton("7"); button_8=new QPushButton("8"); button_9=new QPushButton("9"); button_ce=new QPushButton("CE"); button_cheng=new QPushButton("*"); button_jia=new QPushButton("+"); button_jian=new QPushButton("-"); button_chu=new QPushButton("/"); button__=new QPushButton("+/-"); button_dengyu=new QPushButton("="); QHBoxLayout *Hl1=new QHBoxLayout; QHBoxLayout *Hl2=new QHBoxLayout; QHBoxLayout *Hl3=new QHBoxLayout; QHBoxLayout *Hl4=new QHBoxLayout; QHBoxLayout *Hl5=new QHBoxLayout; Hl1->addWidget(lineEditor);Hl1->addWidget(button_ce);Hl2->addWidget(button_1);Hl2->addWidget(button_2);Hl2->addWidget(button_3);Hl2->addWidget(button_jia);Hl3->addWidget(button_4);Hl3->addWidget(button_5);Hl3->addWidget(button_6);Hl3->addWidget(button_jian);Hl4->addWidget(button_7);Hl4->addWidget(button_8);Hl4->addWidget(button_9);Hl4->addWidget(button_cheng);Hl5->addWidget(button__);Hl5->addWidget(button_0);Hl5->addWidget(button_dengyu);Hl5->addWidget(button_chu);QVBoxLayout *V1=new QVBoxLayout;V1->addLayout(Hl1);V1->addLayout(Hl2);V1->addLayout(Hl3);V1->addLayout(Hl4);V1->addLayout(Hl5);connect(button_0,SIGNAL(clicked()),this,SLOT(button_0_clicked())); connect(button_1,SIGNAL(clicked()),this,SLOT(button_1_clicked())); connect(button_2,SIGNAL(clicked()),this,SLOT(button_2_clicked()));connect(button_3,SIGNAL(clicked()),this,SLOT(button_3_clicked()));connect(button_4,SIGNAL(clicked()),this,SLOT(button_4_clicked()));connect(button_5,SIGNAL(clicked()),this,SLOT(button_5_clicked()));connect(button_6,SIGNAL(clicked()),this,SLOT(button_6_clicked()));connect(button_7,SIGNAL(clicked()),this,SLOT(button_7_clicked()));connect(button_8,SIGNAL(clicked()),this,SLOT(button_8_clicked()));connect(button_9,SIGNAL(clicked()),this,SLOT(button_9_clicked()));connect(button_jia,SIGNAL(clicked()),this,SLOT(button_jia_clicked()));connect(button_jian,SIGNAL(clicked()),this,SLOT(button_jian_clicked()));connect(button_cheng,SIGNAL(clicked()),this,SLOT(button_cheng_clicked()));connect(button_chu,SIGNAL(clicked()),this,SLOT(button_chu_clicked()));connect(button_dengyu,SIGNAL(clicked()),this,SLOT(button_dengyu_clicked()));connect(button_ce,SIGNAL(clicked()),this,SLOT(button_ce_clicked()));connect(button__,SIGNAL(clicked()),this,SLOT(button__clicked()));setLayout(V1);}void Calculator::button_0_clicked(){S+="0";lineEditor->setText(S);if(mark==1){num1=num1*10+0;}else{num2=num2*10;}}void Calculator::button_1_clicked(){ S+="1";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+1;}else{num1=num1*10-1;}}else{if(zhenghao){num2=num2*10+1;}else{num2=num2*10-1;}}}void Calculator::button_2_clicked(){lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+2;}else{num1=num1*10-2;}}else{if(zhenghao){num2=num2*10+2;}else{num2=num2*10-2;}}}void Calculator::button_3_clicked(){ S+="3";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+3;num1=num1*10-3;}}else{if(zhenghao){num2=num2*10+3;}else{num2=num2*10-3;}}}void Calculator::button_4_clicked(){ S+="4";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+4;}else{num1=num1*10-4;}}else{if(zhenghao){num2=num2*10+4;}else{num2=num2*10-4;}}}void Calculator::button_5_clicked(){ S+="5";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+5;}else{num1=num1*10-5;}}else{if(zhenghao){num2=num2*10+5;}else{num2=num2*10-5;}}}void Calculator::button_6_clicked(){ S+="6";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+6;}else{num1=num1*10-6;}}else{if(zhenghao){num2=num2*10+6;}else{num2=num2*10-6;}}}void Calculator::button_7_clicked(){ S+="7";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+7;}else{num1=num1*10-7;}}else{if(zhenghao){num2=num2*10+7;}else{num2=num2*10-7;}}}void Calculator::button_8_clicked(){ S+="8";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+8;}else{num1=num1*10-8;}if(zhenghao){num2=num2*10+8;}else{num2=num2*10-8;}}}void Calculator::button_9_clicked(){ S+="9";lineEditor->setText(S);if(mark==1){if(zhenghao){num1=num1*10+9;}else{num1=num1*10-9;}}else{if(zhenghao){num2=num2*10+9;}else{num2=num2*10-9;}}void Calculator::button_jia_clicked(){ S+="+";lineEditor->setText(S);zhenghao=true;fuhao='+';mark=2;}void Calculator::button_jian_clicked(){ S+="-";lineEditor->setText(S);zhenghao=true;fuhao='-';mark=2;}void Calculator::button_cheng_clicked(){ S+="*";lineEditor->setText(S);zhenghao=true;fuhao='*';}void Calculator::button_chu_clicked(){S+="/";lineEditor->setText(S);zhenghao=true;fuhao='/';mark=2;}void Calculator::button__clicked(){S+="-";lineEditor->setText(S);zhenghao=false;}void Calculator::button_dengyu_clicked(){ S+="=";// lineEditor->setText(S);switch(fuhao){case '+':result=num1+num2;break;case '-':result=num1-num2;break;case '*':result=num1*num2;break;case '/':if(num2)result=num1/num2;break;}int i=0;int result1=result;while(result1){i++;result1/=10;}for(;i;i--){S+=(result/(int)pow(10,i-1)+'0');result%=(int)pow(10,i-1);}lineEditor->setText(S);zhenghao=true;num1=num2=0;mark=1;S="";}void Calculator::button_ce_clicked(){zhenghao=false;S="";lineEditor->setText("0");num1=num2=0;mark=1;}Main代码:#include"calculator.h"int main(int argc,char *argv[]) {QApplication app(argc,argv);Calculator cal;cal.show();return app.exec();}运行结果四、总结通过计算器设计,学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。

嵌入式QT实验报告

嵌入式QT实验报告

嵌入式QT实验报告一、实验目的本次实验的目的是设计并实现一个简单的计算器应用程序,基于嵌入式QT进行开发。

通过这个实验,可以熟悉QT的控件使用、界面设计和信号与槽的连接等知识点。

二、实验原理计算器应用程序的主要功能是实现基本的数学运算,包括加、减、乘、除。

用户通过界面上的按钮输入数字和运算符,程序根据用户的输入进行相应的计算,并将结果显示在界面上。

三、系统设计1.界面设计计算器的界面主要分为两个部分,一个是数字输入框,用于用户输入数字;另一个是运算符按钮区域,用于用户选择运算符。

2.数字和运算符输入用户通过按钮选择数字和运算符,并将其显示在数字输入框中,需要使用QT的信号与槽机制来连接按钮和数字输入框。

3.计算功能根据用户选择的运算符,进行相应的数学运算,并将结果显示在数字输入框中。

需要使用switch语句来判断用户选择的运算符,并进行相应的计算。

四、实验步骤1.创建QT应用程序项目在QT Creator中创建一个新的QT Widget应用程序项目,命名为"Calculator",选择嵌入式QT版本。

2.设计界面使用QT Designer设计计算器的界面,添加一个数字输入框和若干个按钮,按钮包括数字按钮和运算符按钮。

需要注意布局和按钮的大小等细节。

3.连接信号与槽4.实现计算功能在mainwindow.cpp文件中实现计算器功能的代码。

首先声明一个私有变量operand用于保存上一次的操作数;然后根据用户选择的按钮,进行相应的计算。

五、实验结果(插入计算器界面截图)六、实验总结通过本次实验,我成功地设计并实现了一个简单的计算器应用程序。

在实验过程中,我学会了使用QT Designer设计界面,了解了QT的信号与槽机制,能够连接按钮和输入框等控件;同时,也巩固了基本的C++编程知识,熟悉了switch语句的使用。

在实验过程中,我遇到了一些问题,比如界面的布局和按钮的大小等细节问题,通过查阅文档和调试,最终解决了这些问题。

Qt_纯手工简单计算器

Qt_纯手工简单计算器

纯手工简单计算器效果如下:1..h 文件从新定义button#ifndef BUTTON_H#define BUTTON_H#include<QToolButton>//![0]class Button : public QToolButton{Q_OBJECTpublic:Button(const QString &text, QWidget *parent = 0);QSize sizeHint() const;};//![0]#endifCalculator.h#ifndef CALCULATOR_H#define CALCULATOR_H#include<QDialog>QT_BEGIN_NAMESPACEclass QLineEdit;QT_END_NAMESPACEclass Button;//![0]class Calculator : public QDialog{Q_OBJECTpublic:Calculator(QWidget *parent = 0);private slots:void digitClicked();void unaryOperatorClicked();void additiveOperatorClicked();void multiplicativeOperatorClicked();void equalClicked();void pointClicked();void changeSignClicked();void backspaceClicked();void clear();void clearAll();void clearMemory();void readMemory();void setMemory();void addToMemory();//![0]//![1]private://![1]//![2]Button *createButton(const QString &text, const char *member);void abortOperation();bool calculate(double rightOperand, const QString &pendingOperator); //![2]//![3]double sumInMemory;//![3]//![4]double sumSoFar;//![4]//![5]double factorSoFar;//![5]//![6]QString pendingAdditiveOperator;//![6]//![7]QString pendingMultiplicativeOperator;//![7]//![8]bool waitingForOperand;//![8]//![9]QLineEdit *display;//![9]//![10]enum { NumDigitButtons = 10 };Button *digitButtons[NumDigitButtons];};//![10]#endif2..cpp 文件实现Button.cpp#include<QtGui>#include"button.h"//![0]Button::Button(const QString &text, QWidget *parent) : QToolButton(parent){setSizePolicy(QSizePolicy::Expanding, QSizePolicy::Preferred);setText(text);}//![0]//![1]QSize Button::sizeHint() const//![1]//![2]{QSize size = QToolButton::sizeHint();size.rheight() += 20;size.rwidth() = qMax(size.width(), size.height());return size;}//![2]Calculator.cpp#include<QtGui>#include<math.h>#include"button.h"#include"calculator.h"//![0]Calculator::Calculator(QWidget *parent): QDialog(parent){sumInMemory = 0.0;sumSoFar = 0.0;factorSoFar = 0.0;waitingForOperand = true;//![0]//![1]display = new QLineEdit("0");//![1]//![2]display->setReadOnly(true);display->setAlignment(Qt::AlignRight);display->setMaxLength(15);QFont font = display->font();font.setPointSize(font.pointSize() + 8);display->setFont(font);//![2]//![4]for (int i = 0; i < NumDigitButtons; ++i) {digitButtons[i] = createButton(QString::number(i), SLOT(digitClicked()));}Button *pointButton = createButton(tr("."), SLOT(pointClicked()));Button *changeSignButton = createButton(tr("\261"), SLOT(changeSignClicked()));Button *backspaceButton = createButton(tr("Backspace"), SLOT(backspaceClicked()));Button *clearButton = createButton(tr("Clear"), SLOT(clear()));Button *clearAllButton = createButton(tr("Clear All"), SLOT(clearAll()));Button *clearMemoryButton = createButton(tr("MC"), SLOT(clearMemory()));Button *readMemoryButton = createButton(tr("MR"), SLOT(readMemory()));Button *setMemoryButton = createButton(tr("MS"), SLOT(setMemory()));Button *addToMemoryButton = createButton(tr("M+"), SLOT(addToMemory()));Button *divisionButton = createButton(tr("\367"), SLOT(multiplicativeOperatorClicked()));Button *timesButton = createButton(tr("\327"), SLOT(multiplicativeOperatorClicked()));Button *minusButton = createButton(tr("-"), SLOT(additiveOperatorClicked()));Button *plusButton = createButton(tr("+"), SLOT(additiveOperatorClicked()));Button *squareRootButton = createButton(tr("Sqrt"), SLOT(unaryOperatorClicked()));Button *powerButton = createButton(tr("x\262"), SLOT(unaryOperatorClicked()));Button *reciprocalButton = createButton(tr("1/x"), SLOT(unaryOperatorClicked()));Button *equalButton = createButton(tr("="), SLOT(equalClicked()));//![4]//![5]QGridLayout *mainLayout = new QGridLayout;//![5]//![6]mainLayout->setSizeConstraint(QLayout::SetFixedSize);mainLayout->addWidget(display, 0, 0, 1, 6);mainLayout->addWidget(backspaceButton, 1, 0, 1, 2);mainLayout->addWidget(clearButton, 1, 2, 1, 2);mainLayout->addWidget(clearAllButton, 1, 4, 1, 2);mainLayout->addWidget(clearMemoryButton, 2, 0);mainLayout->addWidget(readMemoryButton, 3, 0);mainLayout->addWidget(setMemoryButton, 4, 0);mainLayout->addWidget(addToMemoryButton, 5, 0);for (int i = 1; i < NumDigitButtons; ++i) {int row = ((9 - i) / 3) + 2;int column = ((i - 1) % 3) + 1;mainLayout->addWidget(digitButtons[i], row, column);}mainLayout->addWidget(digitButtons[0], 5, 1);mainLayout->addWidget(pointButton, 5, 2);mainLayout->addWidget(changeSignButton, 5, 3);mainLayout->addWidget(divisionButton, 2, 4);mainLayout->addWidget(timesButton, 3, 4);mainLayout->addWidget(minusButton, 4, 4);mainLayout->addWidget(plusButton, 5, 4);mainLayout->addWidget(squareRootButton, 2, 5);mainLayout->addWidget(powerButton, 3, 5);mainLayout->addWidget(reciprocalButton, 4, 5);mainLayout->addWidget(equalButton, 5, 5);setLayout(mainLayout);setWindowTitle(tr("Calculator"));}//![6]//![7]void Calculator::digitClicked(){Button *clickedButton = qobject_cast<Button *>(sender());int digitValue = clickedButton->text().toInt();if (display->text() == "0" && digitValue == 0.0)return;if (waitingForOperand) {display->clear();waitingForOperand = false;}display->setText(display->text() + QString::number(digitValue)); }//![7]//![8]void Calculator::unaryOperatorClicked()//![8]//![9]{Button *clickedButton = qobject_cast<Button *>(sender());QString clickedOperator = clickedButton->text();double operand = display->text().toDouble();double result = 0.0;if (clickedOperator == tr("Sqrt")) {if (operand < 0.0) {abortOperation();return;}result = sqrt(operand);} else if (clickedOperator == tr("x\262")) {result = pow(operand, 2.0);} else if (clickedOperator == tr("1/x")) {if (operand == 0.0) {abortOperation();return;}result = 1.0 / operand;}display->setText(QString::number(result));waitingForOperand = true;}//![9]//![10]void Calculator::additiveOperatorClicked()//![10]//![11]{Button *clickedButton = qobject_cast<Button *>(sender());QString clickedOperator = clickedButton->text();double operand = display->text().toDouble();//![11]//![12]if (!pendingMultiplicativeOperator.isEmpty()) {//![12]//![13]if (!calculate(operand, pendingMultiplicativeOperator)) { abortOperation();return;}display->setText(QString::number(factorSoFar));operand = factorSoFar;factorSoFar = 0.0;pendingMultiplicativeOperator.clear();}//![13]//![14]if (!pendingAdditiveOperator.isEmpty()) {//![14]//![15]if (!calculate(operand, pendingAdditiveOperator)) {abortOperation();return;}display->setText(QString::number(sumSoFar));} else {sumSoFar = operand;}//![15]//![16]pendingAdditiveOperator = clickedOperator;//![16]//![17]waitingForOperand = true;}//![17]//![18]void Calculator::multiplicativeOperatorClicked(){Button *clickedButton = qobject_cast<Button *>(sender());QString clickedOperator = clickedButton->text();double operand = display->text().toDouble();if (!pendingMultiplicativeOperator.isEmpty()) {if (!calculate(operand, pendingMultiplicativeOperator)) { abortOperation();return;}display->setText(QString::number(factorSoFar));} else {factorSoFar = operand;}pendingMultiplicativeOperator = clickedOperator;waitingForOperand = true;}//![18]//![20]void Calculator::equalClicked(){double operand = display->text().toDouble();if (!pendingMultiplicativeOperator.isEmpty()) {if (!calculate(operand, pendingMultiplicativeOperator)) { abortOperation();return;}operand = factorSoFar;factorSoFar = 0.0;pendingMultiplicativeOperator.clear();}if (!pendingAdditiveOperator.isEmpty()) {if (!calculate(operand, pendingAdditiveOperator)) {abortOperation();return;}pendingAdditiveOperator.clear();} else {sumSoFar = operand;}display->setText(QString::number(sumSoFar));sumSoFar = 0.0;waitingForOperand = true;}//![20]//![22]void Calculator::pointClicked(){if (waitingForOperand)display->setText("0");if (!display->text().contains("."))display->setText(display->text() + tr("."));waitingForOperand = false;}//![22]//![24]void Calculator::changeSignClicked(){QString text = display->text();double value = text.toDouble();if (value > 0.0) {text.prepend(tr("-"));} else if (value < 0.0) {text.remove(0, 1);}display->setText(text);}//![24]//![26]void Calculator::backspaceClicked(){if (waitingForOperand)return;QString text = display->text();text.chop(1);if (text.isEmpty()) {text = "0";waitingForOperand = true;}display->setText(text);}//![26]//![28]void Calculator::clear(){if (waitingForOperand)return;display->setText("0");waitingForOperand = true;}//![28]//![30]void Calculator::clearAll(){sumSoFar = 0.0;factorSoFar = 0.0;pendingAdditiveOperator.clear();pendingMultiplicativeOperator.clear();display->setText("0");waitingForOperand = true;}//![30]//![32]void Calculator::clearMemory(){sumInMemory = 0.0;}void Calculator::readMemory(){display->setText(QString::number(sumInMemory));waitingForOperand = true;}void Calculator::setMemory(){equalClicked();sumInMemory = display->text().toDouble();}void Calculator::addToMemory(){equalClicked();sumInMemory += display->text().toDouble();}//![32]//![34]Button *Calculator::createButton(const QString &text, const char *member){Button *button = new Button(text);connect(button, SIGNAL(clicked()), this, member);return button;}//![34]//![36]void Calculator::abortOperation(){clearAll();display->setText(tr("####"));}//![36]//![38]bool Calculator::calculate(double rightOperand, const QString &pendingOperator) {if (pendingOperator == tr("+")) {sumSoFar += rightOperand;} else if (pendingOperator == tr("-")) {sumSoFar -= rightOperand;} else if (pendingOperator == tr("\327")) {factorSoFar *= rightOperand;} else if (pendingOperator == tr("\367")) {if (rightOperand == 0.0)return false;factorSoFar /= rightOperand;}return true;}//![38]3.Main 实现#include<QApplication>#include"calculator.h"int main(int argc, char *argv[]) {QApplication app(argc, argv);Calculator calc;calc.show();return app.exec();}。

基于QT的计算器

基于QT的计算器

基于QT的计算器专业:学号:学生姓名:指导教师:(五号宋体)目录摘要 (I)Abstract............................................................ I I 第一章诸论. (1)1.1功能需求 (1)1.2运行环境 (1)1.3功能描述 (1)1.4Qt技术介绍 (1)第二章计算器应用程序的设计与实现 (2)2.1开发环境设置 (2)2.2工程建立 (3)2.3信号和槽 (3)2.4UI界面设计 (3)2.5程序编写 (4)第三章功能测试及系统分析 (11)3.1测试方法 (11)3.2功能测试 (11)3.3系统分析 (13)第四章结论 (14)参考文献(References)(四号宋体) (15)摘要当今社会是信息化的社会,随着智能设备的不断发展与普及,智能手机、电脑等高科技设备不断更新换代,出现在人们的生活中。

这也使得人们在工作生活中获得更大的便利。

很多电子设备中都会集成一些小的,便捷人们生活的应用程序,比如手电筒、计算器等。

对于计算器来说,很多应用程序集成的计算方法不一定能够满足人们日常常用的运算需求。

基于这样的原因,设计了这样的计算器程序。

本设计是基于Qt图形用户界面应用程序框架设计的计算器,并实现了一定的平时生活常用的运算功能。

关键词:计算器;QtQT-based calculatorAbstractToday's society is an information-based society. With the continuous development and popularization of smart devices, high-tech devices such as smartphones and computers are constantly being updated and appearing in people's lives. This also makes people more convenient in their work and life. Many electronic devices integrate small applications that are convenient for people, such as flashlights and calculators. For calculators, many application-integrated computing methods do not necessarily meet the computing needs of people today. For this reason, such a calculator program is designed.This design is based on the Qt graphical user interface application framework design calculator and realizes a certain computing function commonly used in daily life.Keyword:Calculator;Qt第一章诸论1.1功能需求在我们日常生活中,会有很多数字的运算,虽然说现在市面上有很多计算器的应用程序,但是总体来说,计算功能尚不够贴近实际,并不符合生活中简单快捷这一原则,计算功能里面普遍会加入一些生活中用不到或者用的少的函数,比如Sin、Cos等。

基于QT简易计算器的设计

基于QT简易计算器的设计

基于QT简易计算器的设计设计一个基于QT的简易计算器,实现基本的四则运算功能。

本文将从需求分析、界面设计、功能实现等方面进行详细介绍。

一、需求分析根据题目要求,设计一个简易计算器,需具备以下功能:1.实现基本的四则运算功能,包括加减乘除;2.支持连续多次运算,即连续按下等号键后可以继续进行后续的运算;3.支持小数点的输入,并可以进行小数运算;4.支持括号的输入,并按照正确的优先级进行计算;5.提供清空按钮,可以清空当前输入的算式;6.提供删除按钮,可以删除当前输入的最后一个字符。

二、界面设计基于QT的图形界面设计,可以使用QGridLayout布局管理器来布局计算器的主要组件。

具体界面设计如下:1. 显示屏:使用一个QLineEdit控件用于显示计算结果,并设置只读属性;2. 数字键:使用QPushButton控件实现数字键,并根据需要设置对应的信号槽;3. 功能键:使用QPushButton控件实现功能键,如加减乘除等,并根据需要设置对应的信号槽;4. 清空和删除键:使用QPushButton控件实现清空和删除键,并根据需要设置对应的信号槽;5.等号键:使用QPushButton控件实现等号键,并根据需要设置对应的信号槽。

三、功能实现2. 信号槽的连接:根据界面设计,将按钮的clicked信号连接到槽函数,实现按钮的点击响应;3.数字键的实现:将数字键的文本值追加到显示屏的文本末尾;4.加减乘除键的实现:将加减乘除键的文本值追加到显示屏的文本末尾;5.小数点键的实现:判断显示屏的文本中是否已经存在小数点,如果不存在,则将小数点追加到文本末尾;6.清空键的实现:清空显示屏的文本内容;7.删除键的实现:删除显示屏文本的最后一个字符;8.等号键的实现:获取显示屏的文本内容,并使用计算表达式的eval函数进行求值,将结果显示在显示屏上。

四、例子演示下面以一个例子进行简单演示:1.界面设计:在界面上设计一个显示屏(QLineEdit控件),以及数字键、加减乘除键和等号键(QPushButton控件),清空和删除键(QToolButton控件)。

嵌入式实验报告-简易计算器

嵌入式实验报告-简易计算器

1实验目的根据计算器的原理设计一个具有加减乘除功能的简易计算器2实验要求(1)数字和结果用数码管显示。

(2)数字、+—*/、=、C用4X4键盘实现。

(3)计算结果正确,有出错提示。

二实验原理框图基本工作原理:本设计利用数码管和4*4 矩阵式键盘实现了简易计算器的功能。

接通电源,数码管显示全0。

计算时,通过键盘输入需要计算的数字,该数字显示在数码管上,当键入等号时,计算结果显示在数码管上。

进行第二次运算时,按 C 键清除键盘结果。

当计算出现错误时,LED 灯亮报警。

当计算结果超出数码管显示出现溢出时,报警电路也会报警。

报警输出为-- 。

四系统软件设计1. 数据输入模块原理:通过4*4 矩阵模块输入数字,在数码管上显示出来。

2. 运算模块原理:四种运算同步运行,通过按键加、减、乘、除选择输出对应的计算结果,当按键等号时,将所得结果反馈给运算模块输入端。

3. 输出模块原理:通过按键等号来控制显示运算对象还是运算结果,当等号按下时,输出计算结果,否则显示当前输入的数据。

当输出结果溢出是LED亮四次,同时数码管显示都为-- 。

五实验调试首先按清零键清零。

然后进行调试。

输入数据2,再按乘法键,输入第二个数字6,按等号键,数码管显示12;再按除法键,输入第二个数据3,按等号键,数码管显示4;再按加法键,输入第三个数据7,依次按等号键,数码管显示11;按减法键,输入第四个数据99,依次按等号键,数码管显示-88 。

若输入超出显示管的最大值或者超出数码管的位数,结果溢出,LED亮报警, 同时数码管显示都为--。

如输入999999加上2,结果就溢出,LED灯亮四次报警。

六程序#include "LPC2468.h" /* LPC24xx definitions */#include "type.h"#include "irq.h"#include "target.h"#include "timer.h"#include "fio.h"#include "keyboard.h"#include "SPI.h" extern BYTE seg_buf[50]; // LPC2468 开发板使用此数组的 0~5 显示六个数 码管;LPC2478板使用1~6BYTE seg_copy1[7];BYTE seg_copy2[7];extern BYTE KEY; // LPC2468 开发板使用此数组的 0~5 显示六个数码管; LPC2478板 使用 1~6 enum { Add =1, Dec, Mut, Div, nofuntion}funtion;********* ** Main Function main()********************************************************************* int main (void) {unsigned long Num1 =0;/*第一个输入的数字 */ unsigned long Num2 =0;/*第二个输入的数字 */ unsigned long Num3 =0;/*第二个输入的数字*/计算输入的数字的个数,超过 6 个则报警, 允许输入数字标志 */ 允许输入数字标志 */ 运算功能 */unsigned char Ne_num = 0;/* 负数标志 */DWORD value=0,i=0;TargetResetInit(); enable_timer(1);SPI_Init(8); // Seg_Init(); // LedsInit();for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0; seg_buf[i]=0;}counter = 0;cal_allow = 1;input_allow = 1; funtion_type = nofuntion;while ( 1 ){value = KEY;/* 输入数字 */ if(value>0 && value<11)if(counter < 6&&input_allow==1){if(counter == 0) seg_buf[1] = value-1;else{for(i=0;i<counter;i++){ unsigned char counter = 0; /* 运算结果超过 6 位数也报警 */unsigned char cal_allow = 1; /*unsigned char input_allow = 1;/* unsigned char funtion_type = 0;/* SPI 总线速率为28.8/8 = 3.6 MHz 数码管初始化seg_buf[counter+1-i] = seg_buf[counter-i];}seg_buf[1] = value-1;} counter++;}if(counter == 6){input_allow = 0;LedOn(1);LedOn(2);LedOn(3);LedOn(4);}}/* 如果是“ C”键,则清除显示,清除计算标志*/ if(value == 11){for(i=0;i<7;i++){ seg_copy1[i]=0; seg_copy2[i]=0;seg_buf[i]=0;counter = 0;Num1 = 0;Num2 = 0;Num3 = 0;cal_allow = 1;input_allow = 1;Ne_num = 0;/* 负数标志*/ funtion_type = nofuntion;}/* 如果是“ +”键,则显示结果*/if(value == 13 ){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/* 备份第一次输入的数字*/ seg_buf[i]=0; /* 字*/}funtion_type = Add;counter = 0; /* cal_allow=1; /* input_allow = 1; /* }else{ 计数器清零允许第二次计数*/ 再等号按下前不能再按第二次*/ 允许第二次输入数据*/input_allow = 0; /* 禁止按下2 次功能键时候输入数据*/显示清零以准备第二次输入数}/* 如果是“ - ”键,则显示结果*/ if(value == 14&& cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*seg_buf[i]=0; /* 字*/}funtion_type = Dec;counter = 0; /*cal_allow =1; /*input_allow = 1; /*}else{input_allow = 0; /*}}备份第一次输入的数字*/显示清零以准备第二次输入数计数器清零允许第二次计数*/ 再等号按下前不能再按第二次*/ 允许第二次输入数据*/禁止按下 2 次功能键时候输入数据*//* 如果是“X”键,则显示结果*/ if(value == 15 && cal_allow == 1) {if(cal_allow == 1){for(i=0;i<7;i++)seg_copy1[i] seg_buf[i]=0; = seg_buf[i];/*/*备份第一次输入的数字 */ 显示清零以准备第二次输入数字*/}funtion_type = Mut;counter = 0; /* 计数器清零允许第二次计数 */cal_allow =1; /* 再等号按下前不能再按第二次 */input_allow = 1 } else {input_allow =; /*允许第二次输入数据 */; /* 禁止按下 2 次功能键时候输入数据 */}} /* 如果是“ / ”键,则显示结果 */if(value == 16 && cal_allow == 1){if(cal_allow == 1){for(i=0;i<7;i++){seg_copy1[i] = seg_buf[i];/*备份第一次输入的数字 */ seg_buf[i]=0; /*显示清零以准备第二次输入数字*/}funtion_type = Div;counter = 0; /*计数器清零允许第二次计数 */ cal_allow =1; /*再等号按下前不能再按第二次 */ }else{input_allow = 0; /* 禁止按下2 次功能键时候输入数据*/}}/* 如果是“ =”键,则清除显示,清除计算标志*/if(value == 12){for(i=0;i<7;i++){seg_copy2[i] = seg_buf[i];/* 拷贝第二次输入的数字*/}/* 把输入的数字串1 合成运算数字*/Num1 = seg_copy1[6]*100000+seg_copy1[5]*10000+ seg_copy1[4]*1000 +seg_copy1[3]*100+ seg_copy1[2]*10 +seg_copy1[1];/* 把输入的数字串2 合成运算数字*/Num2 = seg_copy2[6]*100000+seg_copy2[5]*10000+ seg_copy2[4]*1000 +seg_copy2[3]*100+ seg_copy2[2]*10 +seg_copy2[1];switch(funtion_type){case Add:Num1 = Num1+Num2;/* break;}case Dec:{if(Num1==Num2) Num1 = 0; else if(Num1>Num2) {Num3 = Num1-Num2;/* Num1 = Num3;}else if(Num2 > Num1) {Num3 = Num2-Num1; Ne_num =1;Num1 = Num3;} break;}case Mut:{Num3 = Num1*Num2;/* 计算结果存在 Num1 中*/ Num1 = Num3;break;}case Div:if(Num1>=Num2&&Num2!=0) {Num3 = Num1/Num2;/* 计算结果存在 Num1 中 */ } 计算结果存在Num1中*/ 计算结果存在Num1中*/Num1 = Num3;break;} default:break;}/* 显示结果*/if(Num1>999999||(Ne_num ==1&&Num1>99999)||Num2 ==0) {for(i=0;i<7;i++){seg_copy1[i]=0;seg_copy2[i]=0;seg_buf[i]=10;/* 显示横杠表示计算溢出错误!*/ }for(i=0;i<5;i++){LedOn(1);LedOn(2);LedOn(3);LedOn(4);delayMs(1,200);LedOff(1);LedOff(2);LedOff(3);LedOff(4);delayMs(1,200);}}else{seg_buf[1] = Num1%10;seg_buf[2] = (Num1%100)/10;seg_buf[3] = (Num1%1000)/100;seg_buf[4] = (Num1%10000)/1000;seg_buf[5] = (Num1%100000)/10000;seg_buf[6] = Num1/100000;if(Ne_num ==1){seg_buf[6] = 10;/* 显示负号*/}}} delayMs(1,200);*********End Of File********************************************************************* ********/七实验现象(1)运行成功以后的计算机界面如图一:图一(2)正确输入6+6=12的现象如图二和图三:图三(3)当进行除操作且除数为0时的现象如图四:图四七实验小结在设计计算机的过程中,我们遇到了很多问题,但是都通过查资料和请教同学得到了解决。

嵌入式qt实验报告简单计算器的设计

嵌入式qt实验报告简单计算器的设计

电子科技大学学生实验报告书课程名称实用嵌入式应用系统设计与实现任课老师实验名称简单功能计算器的设计学生姓名学生学号学生学院2015 — 2016 学年第 1 学期实验项目名称简单功能计算器的设计实验日期一、实验内容1、设计一个简单计算器并能完成简单的四则运算,实时更新运算结果;2、带界面计算器自带数字及功能按钮,能实现更多以及更灵活的的计算功能。

一、实验步骤设计(包括实验方案设计、实验步骤或算法描述等)实验设计方案如下:图1 简单计算器的设计方案流程图2 带显示界面计算器的设计方案流程实验步骤:一、简单计算器的设计:1、创建一个Qt GUI应用项目,项目名称为dialog_designer ,基类选择Qwidget。

项目建好后会自动生成一系列文件,双击界面文件widget.ui 进入Qt Designer 进行界面设计。

2、界面设计完成后修改控件的各属性,并修改Tab顺序,点击工具栏上的的“编辑Tab顺序”按钮,依次按顺序点击即可,完成后再按工具栏上的编辑控件按钮返回。

3、在头文件widget.h的Widget类添加共有槽函数;在源文件widget.cpp中添加新代码。

4、用模拟器调试运行。

二、带界面的计算器的设计:与简单计算器的设计步骤基本相同。

但是需要在项目文件(后缀为.pro)添加一段代码,使得程序中能使用Qt脚本,在原有代码的基础上添加。

在头文件widget.h的Widget类添加共有槽函数和全局变量,以及包含头文件QtScript,以使用Qt Script API。

在源文件widget.cpp中添加新代码,之后即可运行调试。

三、实验结果分析及代码(包括结果描述、综合分析及实现关键代码)实验结果如下:1、简单计算器:代码:(1)在widget.h文件中#ifndef WIDGET_H#define WIDGET_H#include<QWidget>namespace Ui{class Widget;}class Widget:public QWidget{Q_OBJECTpublic:explicit Widget(QWidget*parent=0);~Widget();private slots:void on_doubleSpinBox_1_valueChanged();void on_doubleSpinBox_2_valueChanged();void on_doubleSpinBox_3_valueChanged();void on_doubleSpinBox_4_valueChanged();void on_doubleSpinBox_5_valueChanged();void on_doubleSpinBox_6_valueChanged();void on_doubleSpinBox_7_valueChanged();void on_doubleSpinBox_8_valueChanged(); private:Ui::Widget*ui;};#endif//WIDGET_H(2)在widget.cpp源文件中#include"widget.h"#include"ui_widget.h"Widget::Widget(QWidget*parent):QWidget(parent),ui(new Ui::Widget){ui->setupUi(this);}void Widget::on_doubleSpinBox_1_valueChanged(){ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value() +ui->doubleSpinBox_2->value()));}void Widget::on_doubleSpinBox_2_valueChanged(){ui->outout_plus->setText(QString::number(ui->doubleSpinBox_1->value() +ui->doubleSpinBox_2->value()));}void Widget::on_doubleSpinBox_3_valueChanged(){ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value( )-ui->doubleSpinBox_4->value()));}void Widget::on_doubleSpinBox_4_valueChanged(){ui->outout_minus->setText(QString::number(ui->doubleSpinBox_3->value()-ui->doubleSpinBox_4->value()));}void Widget::on_doubleSpinBox_5_valueChanged(){ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value( )*ui->doubleSpinBox_6->value()));}void Widget::on_doubleSpinBox_6_valueChanged(){ui->outout_multi->setText(QString::number(ui->doubleSpinBox_5->value( )*ui->doubleSpinBox_6->value()));}void Widget::on_doubleSpinBox_7_valueChanged(){ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value() /ui->doubleSpinBox_8->value()));}void Widget::on_doubleSpinBox_8_valueChanged(){ui->outout_div->setText(QString::number(ui->doubleSpinBox_7->value() /ui->doubleSpinBox_8->value()));}Widget::~Widget(){delete ui;}2、带显示界面的计算器:代码:(1)在shiyanB.pro项目文件中QT+=core guiQT+=scriptgreaterThan(QT_MAJOR_VERSION,4):QT+=widgetsTARGET=shiyanBTEMPLATE=appSOURCES+=main.cpp\widget.cppHEADERS+=widget.hFORMS+=widget.ui(2)在头文件widget.h中#ifndef WIDGET_H#define WIDGET_H#include<QtScript>#include"QWidget" namespace Ui{class Widget;}class Widget:public QWidget{Q_OBJECTpublic:QString sum;//全局变量。

Qt制作计算器总结(一)

Qt制作计算器总结(一)

Qt制作计算器总结(一)
Qt制作计算器总结
在Qt的学习中,实现计算器的功能是一个很好的综合实践。

下面将就Qt如何制作计算器进行总结:
一、界面设计
Qt Creator提供了一种可视化设计图形界面的方式,简单方便,可以直接拖拽控件进行布局设计。

计算器一般包括数字键盘、运算符键、结果显示区等几个部分。

要注意界面的美观性、可用性,最好采用现成的UI主题来进行美化。

二、逻辑实现
计算器的逻辑比较简单,主要思路是将用户输入的数字和运算符进行分离,并实时更新结果。

在C++中,可以用QStack类来实现后缀表达式转换和计算。

具体思路如下:
1.将用户输入的数值和运算符压入栈中。

2.将运算符和表达式中其他运算符和数值一一比较,如果优先级更低则将其弹出,否则压入栈中。

3.最后根据后缀表达式进行计算。

三、注意点
1.处理好运算符的优先顺序,除了考虑四则运算之外,还要考虑到括
号和幂运算等。

2.遇到不合法的输入时,需要进行有效的异常处理,避免程序崩溃。

3.注意界面的可用性,比如通过快捷键或者鼠标点击来实现数字输入,同时也要考虑到界面的响应效率。

四、总结
Qt制作计算器具有一定的难度,需要掌握Qt图形界面的组件,以及
C++语言的基础知识和思维方式。

要想更好地掌握Qt,需要不断练习和尝试,不断提高自己的动手能力。

Qt计算器

Qt计算器

Linux界面设计——Qt简单计算器课程名称:计算机基础综合课题分类:Qt界面设计班级:11计算机科学与技术2班姓名:段秉芮学号:1145532211完成时间:2014年01月01Qt计算器一.摘要当今社会是信息社会,科技经济高速发展的社会,为了更方便人们的工作生活和加速人们处理信息的速度,计算器应运而生。

然而,电脑已经成为当代人生活的必需品,运行在电脑上的计算器成为了人们的生活学习绝佳伴侣。

本设计是用C++编写的,基于Qt图形用户界面应用程序框架的计算器。

设计出两个电脑端和安卓手机端两个应用程序,并实现了一定的计算功能。

二.建立项目如下所示:首先在linux下softcenter安装Qt Creator或者在terminal中输入命令安装;sudo apt-get install libqt4-dev libqt4-debug libqt4-gui libqt4-sql qt4-dev-tools qt4-doc qt4-designer qt4-qtconfig比如qt4-dev-tools 包含了Qt Assistant及Qt Linguist等工具,因此不需要单独安装这两个工具。

其它的,qt4-doc 是帮助文档,包含了Qt中各个类库的详细说明以及丰富的例子程序,可以使用Qt Assistant 工具来打开阅读。

qt4-qtconfig 是配置Qt环境的一个对话框,一般默认就行了,很少有必要去更改。

qt4-demos 包含很多可以运行起来的可执行文件以及源代码。

qt4-designer是用来设计GUI界面的设计器sudo apt-get install libqt4-debug//sudo apt-get install libqt4-dbg安装完成打开。

1.创建工程选择File->New File or Project,然后如下所示,之后next。

之后在Details时候,选项Base class选中QWidget。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

嵌入式系统课程设计报告
题目:基于QT的简单计算器
专业:计算机科学与技术
班级:
姓名:
学号:
指导老师:
日期:2012-12-26
第一章前言
设计背景
计算器(calculator;counter)一般是指“电子计算器”,计算器是能进行数学运算的手持机器,拥有集成电路芯片,其结构简单,比现代电脑结构简单得多,可以说是第一代的电子计算机(电脑)。

计算器这一小小的程序机器实际上是从计算机中割裂出来的衍生品,虽然功能较单一,但因其操作模式的方便快捷和价格的低廉,携带方便等特点,已经被广泛应用于工程、学习、商业贸易等日常生活中,极大的方便了人们对于数字的整合运算,成为人们生活和办公中的必备品之一,深得使用者的青睐。

设计目的
本程序是基于linux下的嵌入式开发,所用软件为QT Creator,程序虽然简单,但是通过本程序的设计,可以进一步了解嵌入式系统开发工具以及熟悉linux环境下的常用命令,为以后进入嵌入式领域打下一定的基础。

通过该计算器程序软件的设计,培养独立思考、综合运用所学有关相应知识的能力,更好地巩固《C++程序语言设计》和《高级程序设计》课程学习的内容,掌握工程软件设计的基本方法,强化上机动手编程能力,体验理论与实践相结合的过程。

第二章功能需求分析
功能描述
本次设计的计算器在功能上大致与Windows系统自带的计算器程序相似,对于所设计的科学计算器,其功能大致为可以进行加(+)、减(-)、乘(*)、除(/)、简单算术计算。

由于接触QT时间还不太久,所以目前只能简单地实现这些功能,相信随着以后逐步的了解,本程序将实现更多的功能。

第三章开发工具简介
QT简介
由于本次设计的小程序是用QT Creator所设计的,所以我觉得有必要先介绍下QT开发工具的背景。

Qt是一个1991年由奇趣科技开发的跨平台C++图形界面应用程序开发框架。

它既可以开发GUI程式,也可用于开发非GUI程式,比如控制台工具和服务器。

Qt是面向对象语言,易于扩展,并且允许组件编程。

QT所具有的优势是:优良的跨平台特性,Qt支持下列操作系统: Microsoft Windows 95/98,Microsoft Windows NT,Linux,Solaris,SunOS,HP-UX,Digital UNIX (OSF/1,Tru64),Irix,FreeBSD,BSD/OS,SCO,AIX,OS390,QNX 等等。

面向对象:Qt 的良好封装机制使得Qt 的模块化程度非常高,可重用性较好,对于用户开发来说是非常方便的。

Qt 提供了一种称为signals/slots 的安全类型来替代callback,这使得各个元件之间的协同工作变得十分简单。

丰富的API:Qt 包括多达250 个以上的C++ 类,还提供基于模板的collections,serialization,file,I/O device,directory management,date/time 类。

甚至还包括正则表达式的处理功能。

支持2D/3D 图形渲染,支持OpenGL大量的开发文档。

第四章详细设计过程
开发环境的搭建
本次所用系统环境为Ubuntu LTS,内核为Ubuntu搭建QT环境大致过程为:
1.安装g++,ubuntu默认是不带g++的,如果不安装的话,后面是无法进行桌面版的qt应用程序进行编译的,在终端中执行以下命令:
sudo apt-get install g++
2. Qt桌面版的安装
3.安装arm-linux-gcc (配置环境变量gedit /.bashrc 添加路径
export PATH=$PATH:/opt/FriendlyARM/toolschain/)
使配置文件立即生效:source /.bashrc或者注销logout 最好重启
(arm-linux-gcc -v查看版本信息)
4.安装编译库文件
5. 配置Qt编译ARM的环境(解压编译时间较长,具体过程不再赘述)
程序实现
对于界面的设计,采用的网格布局作为主布局,然后使用其addWidget函数添加部件,最后实现了基本的简易计算机的界面。

程序最终界面如下:
首先创建一个工程项目,名字为jsq,接着编写各个功能部件函数,这里仍使用信函和槽连接机制,我们没有使用信号和槽编辑器,而是直接在.cpp文件中添编写其代码来实现,首先在.h文件中对各个按键进行声明, 再到.cpp文件中编写相应的代码实现其功能。

例如窗体控制程序,按钮程序,计算功能则在程序代码中实现。

软件工作界面如下:
对于计算器,在界面上,点击相应的按钮,信号会随着点击传递到相应的槽函数中,并实现函数的功能,经过处理得到相应的结果。

并能够将结果输出。

下面依次介绍按钮及所连接的槽函数
相应的连接信号语句:
Button *clearAllButton = createButton(tr("Clear"), SLOT(Clear ()));
RM嵌入式系统教程[M].北京:机械工业出版社,2012:191-261.
[3] 闫锋欣,曾泉人.C++ GUI QT4编程(第二版)[M].北京:电子工业出版社,2010:108-232.
[4] 闫放莺.基于嵌入式Linux 软件平台技术的研究[D].西安:西北大学,2006.
[5] 郭兵.嵌入式软件开放式集成开发平台体系结构研究[D].成都:电子科技大学,2002.
[6] 谭浩强.C++面向对象程序设计[M].北京:清华大学出版社,.。

相关文档
最新文档