嵌入式系统之基于QT的简单计算器
- 格式:docx
- 大小:347.14 KB
- 文档页数:6
衡阳师范学院嵌入式系统课程设计题目:基于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是一种跨平台的应用程序开发框架,它提供了一种编写图形用户界面(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的计算器设计计算器一直以来都是人们日常生活中不可或缺的工具之一、在计算器的设计中,我们既要考虑到功能的实现,也要注重用户界面的友好性和操作的便捷性。
而QT作为一种跨平台的GUI应用框架,提供了丰富的工具和组件,使得计算器的开发变得更加方便和快捷。
在设计基于QT的计算器时,需要分析要实现的功能,确定用户界面的布局和组件的选择。
下面将详细介绍如何使用QT设计一个功能完备、外观美观的计算器。
首先需要确定计算器的基本功能,如四则运算、括号运算、正负数运算等。
然后进行界面布局的设计。
QT提供了丰富的布局管理器,可以根据实际需要选择合适的布局方式。
在计算器设计中,通常使用的是网格布局,方便将按钮等组件进行排列。
在QT中,可以使用QPushButton组件来作为计算器的按钮,使用QLineEdit组件来显示计算结果。
另外,几个常用的功能按钮,如清除按钮、等号按钮等,可以直接使用QT提供的控件。
每个按钮通过信号和槽机制与计算器的功能函数进行连接,实现对应的功能。
接下来我们开始设计计算器的主界面。
打开QT Creator,选择创建新的QT Widgets应用程序项目。
在UI设计器中拖拽QPushButton组件来作为计算器的数字按钮,将QLineEdit组件作为计算结果显示框。
然后使用网格布局将这些按钮和显示框进行排列。
先设计一个简单的计算器,支持四则运算和正负数运算功能。
在UI 设计器中布局好按钮后,设置每个按钮的文本为对应的数字或符号,并将它们的槽函数与计算器实现的相应函数进行连接。
在计算器实现中,可以使用QStack来实现对括号的匹配和计算的过程。
对于四则运算,可以使用逆波兰表达式来实现,即将中缀表达式转换为后缀表达式,然后再进行求值。
在计算器类中,可以设计一个函数来将用户输入的表达式转换为逆波兰表达式,再利用栈来进行求值。
对于括号运算,可以使用递归的方式来实现。
首先找到最内层的括号,将它们的值计算出来,然后将计算结果替换成新的表达式,再进行下一轮的计算,直到没有括号为止。
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的控件使用、界面设计和信号与槽的连接等知识点。
二、实验原理计算器应用程序的主要功能是实现基本的数学运算,包括加、减、乘、除。
用户通过界面上的按钮输入数字和运算符,程序根据用户的输入进行相应的计算,并将结果显示在界面上。
三、系统设计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语句的使用。
在实验过程中,我遇到了一些问题,比如界面的布局和按钮的大小等细节问题,通过查阅文档和调试,最终解决了这些问题。
纯手工简单计算器效果如下: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的计算器专业:学号:学生姓名:指导教师:(五号宋体)目录摘要 (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等。
嵌入式系统之基于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++图形界面应用程序开发框架。
它既可以开发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].北京:清华大学出版社,.。