Qt计算器

  • 格式:doc
  • 大小:595.50 KB
  • 文档页数:18

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。

然后next至finish。

二.程序代码如下:1.建立calculator.h右键calculator项目,选择add new。

如下所示:calculator.h代码修改如下:#ifndef CALCULATOR_H#define CALCULATOR_H#include<QTextEdit>#include<QPushButton>#include<QAction>#include<QVector>class Calculator : public QWidget {Q_OBJECTpublic:Calculator(QWidget *parent = 0); ~Calculator();private:QTextEdit* screenTextEdit; QPushButton* button1; QPushButton* button2; QPushButton* button3; QPushButton* button4; QPushButton* button5; QPushButton* button6; QPushButton* button7; QPushButton* button8; QPushButton* button9; QPushButton* button0; QPushButton* buttonx; QPushButton* buttondivide; QPushButton* buttonadd; QPushButton* buttonsub; QPushButton* buttondot; QPushButton* buttonequal; QPushButton* buttonclear; QPushButton* buttonback; QPushButton* buttonLArc; QPushButton* buttonRArc; bool isEnter;double sum ;int i;int j;double result;bool isPoint;bool isLArc;char sign;bool isTwoOptrsFlag;bool isEqualClicked;int f1[7];int f2[7];QVector<double>vectorOpnd; QVector<char>vectorOptr; QVector<char>vectorExp;bool isTwoOptr(QPushButton *button);void initConnect();void initVector();double operate(double a, char theat, double b);char precedeSign(char optr1, char optr2);int char2num(char optr);void initData();char button2char(QPushButton *button);void getDigital(char digital);void getSign(char ch);bool pickSign(char ch);bool pushVector(char optr);void getResult();private slots:void getButton();void clearScreen();void myBackSpace();};#endif // CALCULATOR_H2.main.cpp修改如下:只需要将Widget w;w.show();修改为Calculator cal;cal.show();3.calculator.cpp建立calculator.cpp文件的过程和建立calculator.h的过程一样,只是选择C++ Source File选项。

calculator.cpp代码如下:#include "calculator.h"#include<QGridLayout>Calculator::Calculator(QWidget *parent): QWidget(parent){initData();setWindowTitle("计算器");setWindowIcon(QIcon(":/calculator.png"));screenTextEdit = new QTextEdit;screenTextEdit->setFixedHeight(50);screenTextEdit->setFont(QFont("Courier 10 Pitch", 18, QFont::Bold)); screenTextEdit->setReadOnly(true);button1 = new QPushButton("1");button2 = new QPushButton("2");button3 = new QPushButton("3");button4 = new QPushButton("4");button5 = new QPushButton("5");button6 = new QPushButton("6");button7 = new QPushButton("7");button8 = new QPushButton("8");button9 = new QPushButton("9");button0 = new QPushButton("0");buttonx = new QPushButton("×");buttonadd = new QPushButton("+");buttonsub = new QPushButton("-");buttonback = new QPushButton("back");buttondivide = new QPushButton("/");buttondot = new QPushButton(".");buttonLArc = new QPushButton("(");buttonRArc = new QPushButton(")");buttonequal = new QPushButton("=");buttonclear = new QPushButton("clear");initConnect();QGridLayout *gridLayout = new QGridLayout;gridLayout->addWidget(screenTextEdit, 0, 0, 2, 5);gridLayout->addWidget(button1, 2, 0, 1, 1);gridLayout->addWidget(button2, 2, 1, 1 ,1);gridLayout->addWidget(button3, 2, 2, 1, 1);gridLayout->addWidget(buttonadd, 2, 3, 1, 1);gridLayout->addWidget(buttonsub, 2, 4, 1, 1);gridLayout->addWidget(button4, 3, 0, 1, 1);gridLayout->addWidget(button5, 3, 1, 1, 1);gridLayout->addWidget(button6, 3, 2, 1, 1);gridLayout->addWidget(buttonx, 3, 3, 1, 1);gridLayout->addWidget(buttondivide, 3, 4, 1, 1);gridLayout->addWidget(button7, 4, 0, 1, 1);gridLayout->addWidget(button8, 4, 1, 1, 1);gridLayout->addWidget(button9, 4, 2, 1, 1);gridLayout->addWidget(buttonLArc, 4, 3, 1, 1);gridLayout->addWidget(buttonRArc, 4, 4, 1, 1);gridLayout->addWidget(button0, 5, 0, 1, 1);gridLayout->addWidget(buttondot, 5, 1, 1, 1);gridLayout->addWidget(buttonback, 5, 2, 1, 1);gridLayout->addWidget(buttonclear, 5, 3, 1, 1);gridLayout->addWidget(buttonequal, 5, 4, 1, 1);setLayout(gridLayout);initVector();}void Calculator::initConnect(){connect(button0, &QPushButton::clicked, this, &Calculator::getButton); connect(button1, &QPushButton::clicked, this, &Calculator::getButton); connect(button2, &QPushButton::clicked, this, &Calculator::getButton); connect(button3, &QPushButton::clicked, this, &Calculator::getButton); connect(button4, &QPushButton::clicked, this, &Calculator::getButton); connect(button5, &QPushButton::clicked, this, &Calculator::getButton); connect(button6, &QPushButton::clicked, this, &Calculator::getButton); connect(button7, &QPushButton::clicked, this, &Calculator::getButton); connect(button8, &QPushButton::clicked, this, &Calculator::getButton); connect(button9, &QPushButton::clicked, this, &Calculator::getButton); connect(buttonx, &QPushButton::clicked, this, &Calculator::getButton); connect(buttonadd, &QPushButton::clicked, this, &Calculator::getButton); connect(buttondivide, &QPushButton::clicked, this, &Calculator::getButton); connect(buttondot, &QPushButton::clicked, this, &Calculator::getButton); connect(buttonsub, &QPushButton::clicked, this, &Calculator::getButton); connect(buttonRArc, &QPushButton::clicked, this, &Calculator::getButton); connect(buttonLArc, &QPushButton::clicked, this, &Calculator::getButton); connect(buttonback, &QPushButton::clicked, this, &Calculator::myBackSpace); connect(buttonclear, &QPushButton::clicked, this, &Calculator::clearScreen); connect(buttonequal, &QPushButton::clicked, this, &Calculator::getButton); }bool Calculator::isTwoOptr(QPushButton *button){if(button == buttonadd || button ==buttonsub|| button == buttonx || button == buttondivide)return true;elsereturn false;}void Calculator::myBackSpace(){QTextCursor cursor = screenTextEdit->textCursor();cursor.deletePreviousChar();if(!isEqualClicked)vectorExp.pop_back();}void Calculator::getButton(){QPushButton* button = qobject_cast<QPushButton*>(sender()); if(isTwoOptrsFlag && isTwoOptr(button)){}else{vectorExp.append(button2char(button));isEqualClicked = false;isTwoOptrsFlag = false;if(!isEnter)screenTextEdit->append("");screenTextEdit->insertPlainText(button->text());isEnter = true;if(button == buttonadd || button == buttonsub|| button == buttonx || button == buttondivide) isTwoOptrsFlag = true;}if(button == buttonequal){isEqualClicked = true;getResult();}}void Calculator::getResult(){while(!vectorExp.isEmpty()){char ch = vectorExp.first();vectorExp.removeFirst();getDigital(ch);getSign(ch);}}void Calculator::getDigital(char digital){if(digital == '0' || digital == '1' || digital == '2'|| digital == '3' || digital == '4' || digital == '5'|| digital == '6' || digital == '7' || digital == '8'|| digital == '9' ){if(isPoint)i *= 10;j = 0;sum = sum * 10 + (digital - '0');isLArc = false;}else if(digital == '.'){isPoint = true;isLArc = false;}}void Calculator::getSign(char ch){if(isLArc && ch != '(' && ch != ')'){sign = ch;}else if(ch == '+' || ch == '-'|| ch == '*' || ch == '/'|| ch == '=' || ch == '('|| ch == ')'){if(ch == '(')isLArc = true;elseisLArc = false;j++;if(j <=1){if(sign == '-')sum = sum * (-1);sign = ' ';vectorOpnd.append(sum / i);isLArc = false;i = 1;sum = 0;isPoint = false;}pickSign(ch);}}bool Calculator::pickSign(char ch){char theta;double a, b;if(ch == '='){while(st() != '#'){do{theta = st();vectorOptr.pop_back();}while(theta == '(' || theta == ')');if(theta != '#')//void 8(,9),8(){b = st();vectorOpnd.pop_back();a = st();vectorOpnd.pop_back();vectorOpnd.append(operate(a, theta, b));}else if(theta == '#')vectorOptr.append('#');}result = st();screenTextEdit->insertPlainText(QString("%1").arg(result));vectorOpnd.clear();vectorOptr.clear();initVector();isEnter = false;return true;}pushVector(ch);return true;}bool Calculator::pushVector(char optr){char theta;double a, b;if(optr == ')'){do{theta = st();vectorOptr.pop_back();}while(theta == '(' || theta == ')');if(theta != '#')// void 8(,9),8(){b = st();vectorOpnd.pop_back();a = st();vectorOpnd.pop_back();vectorOpnd.append(operate(a, theta, b));}else{vectorOptr.append('#');}return true;}switch(precedeSign(st(),optr)){case '<':vectorOptr.append(optr);break;case '=':vectorOptr.pop_back();break;case '>':theta = st();vectorOptr.pop_back();b = st();vectorOpnd.pop_back();a = st();vectorOpnd.pop_back();vectorOpnd.append(operate(a, theta, b));vectorOptr.append(optr);break;}return true;}void Calculator::clearScreen(){screenTextEdit->clear();result = 0;isEnter = true;}double Calculator::operate(double a, char theta, double b) {double sum1;switch (theta) {case '+':sum1 = a + b; break;case '-':sum1 = a - b; break;case '*':sum1 = a * b; break;case '/':sum1 = a / b; break;}return sum1;}char Calculator::button2char(QPushButton *button){char optr;if(button == buttonadd)optr = '+';else if(button == buttonsub)optr = '-';else if(button == buttonx)optr = '*';else if(button == buttondivide)optr = '/';else if(button == buttonLArc)optr = '(';else if(button == buttonRArc)optr = ')';else if(button == buttonequal)optr = '=';else if(button == button0)optr = '0';else if(button == button1)optr = '1';else if(button == button2)optr = '2';else if(button == button3)optr = '3';else if(button == button4)optr = '4';else if(button == button5)optr = '5';else if(button == button6)optr = '6';else if(button == button7)optr = '7';else if(button == button8)optr = '8';else if(button == button9)optr = '9';else if(button == buttondot)optr = '.';return optr;}char Calculator::precedeSign(char optr1, char optr2) {char compare;int i1 = char2num(optr1);int i2 = char2num(optr2);if(f1[i1] > f2[i2])compare = '>';else if(f1[i1] < f2[i2])compare = '<';elsecompare = '=';return compare;}int Calculator::char2num(char optr)int ii;switch(optr){case '+':ii = 0; break;case '-':ii = 1; break;case '*':ii = 2; break;case '/':ii = 3; break;case '(':ii = 4; break;case ')':ii = 5; break;default:ii = 6;}return ii;}void Calculator::initData(){i = 1;j = 0;sum = 0;f1[0] = f1[1] =3; f1[2] = f1[3] = 5; f1[4] = 1; f1[5] = 6; f1[6] = 0;f2[0] = f2[1] = 2; f2[2] = f2[3] = 4; f2[4] = 6; f2[5] = 1; f2[6] = 0;isPoint = false;isLArc = false;sign = ' ';isTwoOptrsFlag = false;isEqualClicked = false;isEnter = true;}void Calculator::initVector(){vectorOptr.append('#');vectorOpnd.append(0);vectorOpnd.append(0);vectorOpnd.append(0);Calculator::~Calculator() {}三.程序运行结果如下:四.总结通过计算器设计,学到了利用Qt设计简单窗口应用程序的的方法,初步了解了使用QT 工具编写窗口程序的新颖,了解了槽和信号等基本知识,学会了如何使用新工具(Qt)帮助程序开发。