qt计算器实现源码

合集下载

简易计算器程序源代码

简易计算器程序源代码

简易计算器程序源代码下面是一个简易计算器程序的源代码,它可以执行基本的四则运算:```python#定义加法函数def add(x, y):return x + y#定义减法函数def subtract(x, y):return x - y#定义乘法函数def multiply(x, y):return x * y#定义除法函数def divide(x, y):if y == 0:return "除数不能为0"else:return x / y#显示菜单print("选择操作:")print("1. 相加")print("2. 相减")print("3. 相乘")print("4. 相除")#获取用户输入choice = input("输入你的选择(1/2/3/4): ")#获取用户输入的两个数字num1 = float(input("输入第一个数字: "))num2 = float(input("输入第二个数字: "))#根据用户选择执行相应操作if choice == '1':print(num1, "+", num2, "=", add(num1, num2))elif choice == '2':print(num1, "-", num2, "=", subtract(num1, num2)) elif choice == '3':print(num1, "*", num2, "=", multiply(num1, num2)) elif choice == '4':print(num1, "/", num2, "=", divide(num1, num2))else:print("请输入有效的选择")```运行这个程序,你将看到一个简易的计算器菜单。

qt 公式计算程序

qt 公式计算程序

qt 公式计算程序Qt(即Cute)是一种跨平台的应用程序开发框架,它提供了丰富的库和工具,旨在简化软件开发过程。

Qt公式计算程序是一种基于Qt 框架开发的应用程序,用于实现各种数学公式的计算和求解。

本文将介绍Qt公式计算程序的特点和功能,并通过具体的例子来展示其使用方法和效果。

一、Qt公式计算程序的特点Qt公式计算程序具有以下几个特点:1. 跨平台性:Qt框架可以在多个操作系统上运行,包括Windows、Mac、Linux等,因此Qt公式计算程序可以在不同的平台上使用。

2. 用户友好性:Qt公式计算程序提供了直观的用户界面,用户可以通过简单的操作来输入和编辑数学公式,从而实现快速的计算和求解。

3. 支持多种公式:Qt公式计算程序支持多种数学公式的计算,包括代数、几何、微积分等各个领域的公式。

4. 精确计算:Qt公式计算程序采用高精度计算方法,可以有效避免浮点数运算带来的误差,保证计算结果的准确性。

二、Qt公式计算程序的功能Qt公式计算程序提供了丰富的功能,包括:1. 公式输入:用户可以通过键盘输入数学公式,也可以通过复制粘贴的方式导入已有的公式。

2. 公式编辑:Qt公式计算程序提供了公式编辑器,用户可以对已输入的公式进行编辑、修改和删除操作,以满足不同计算需求。

3. 公式求解:用户可以通过点击“求解”按钮,对输入的数学公式进行求解,程序将自动计算并给出结果。

4. 错误处理:Qt公式计算程序具备良好的错误处理机制,当用户输入的公式存在语法错误或计算错误时,程序会给出相应的错误提示,并提供修正建议。

5. 历史记录:Qt公式计算程序支持历史记录功能,用户可以随时查看之前输入的公式和计算结果,方便复用和参考。

三、使用示例下面通过一个具体的例子来展示Qt公式计算程序的使用方法和效果。

假设我们需要计算一个二次方程的根。

首先,在公式输入框中输入二次方程的表达式:ax^2 + bx + c = 0。

然后,点击“求解”按钮,程序将自动计算出二次方程的根,并显示在结果框中。

嵌入式系统之基于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语言来创建用户界面。

qt creator 开发例程

qt creator 开发例程

qt creator 开发例程Qt Creator 是一款跨平台的集成开发环境(IDE),专门用于开发基于 Qt 框架的应用程序。

它提供了丰富的功能和工具,使开发者能够更轻松地创建和管理他们的项目。

在 Qt Creator 中,开发者可以通过创建新项目或打开现有项目来开始他们的开发工作。

Qt Creator 支持多种编程语言,包括 C++、QML、JavaScript 等,开发者可以根据自己的喜好选择合适的语言进行开发。

Qt Creator 还提供了强大的调试功能,开发者可以轻松地调试他们的应用程序,查找和修复 bug。

除此之外,Qt Creator 还集成了版本控制工具,开发者可以方便地管理他们的代码库,进行版本控制。

对于初学者来说,Qt Creator 提供了丰富的开发例程,帮助他们快速上手 Qt 开发。

这些开发例程涵盖了各种方面的开发内容,包括界面设计、逻辑编写、数据存储等,帮助初学者了解 Qt 开发的基本流程和技巧。

例如,一个简单的 Qt Creator 开发例程可以是一个基于 Qt Widgets 的简单计算器应用程序。

通过这个例程,开发者可以学习如何创建基本的窗口界面,设计布局,添加按钮和文本框等控件,编写逻辑代码实现计算功能。

这个例程可以帮助开发者熟悉 Qt Creator 的界面和工具,了解 Qt Widgets 的基本用法,为日后开发更复杂的应用程序打下基础。

除了基础的例程外,Qt Creator 还提供了各种高级的例程,涵盖了 Qt 的各种模块和功能,如网络编程、多线程处理、图形绘制等。

这些例程可以帮助开发者进一步掌握 Qt 的高级功能,提升他们的开发能力。

总的来说,Qt Creator 是一款功能强大的开发工具,提供了丰富的开发例程,帮助开发者快速上手 Qt 开发,掌握 Qt 的各种功能和技巧。

开发者可以通过学习这些例程,提升他们的开发能力,开发出更加优秀的 Qt 应用程序。

Qt简易计算器代码

Qt简易计算器代码

# include H cwidget.h H#define KEY.CLR ,,CLR H#define KEY.ADD n | II#define KEY.SUB II II#define KEY_MUL#define KEY.DIV H「#define KEY_EQ ii—*#define KEY_0 ©#define KEY.lII ] II#define KEY_2 卵2“#define KEY_3 U3U#define KEY_4 w#define KEY_5 H5H#define KEY_6 H6M#define KEY_7 “7"#define KEY_8 ,,8H#define KEY_9cwidgeteCpp#define BUHONWIDTH 30#define BUnONHEIGHT30static char *buttontext[]={KEY_1 ,KEY_2,KEY_3,KEY_4,KEY_5KEY_6,KEY_7,KEY_8,KEY_9,KEY_ADD,KEY_SUB,KEY_MUL, KEY_DIV,KEY_EQ,KEY_CLR,KEY_O };〃定义按键的长度〃定义按键的宽度〃定义静态全局变量CWidget::CWidget(QWidget *parent, char *name) {initialize)); createFormf);}CWidget::〜CWidget()〃构造函数〃析构函数,销毁各个按键delete edit;delete *button;delete mainLayout; delete topLayout; delete bo卄omLayout; }void CWidget::calculate()功能{switch (oper){case Qt::Key_Plus:firstNum + 二 secondNum;break; caseQt::Key_Minus:firstNum -= secondNum;break; caseQt::Key_Asterisk:firstNum *= secondNum;break; caseQt::Key_Slash:firstNum / 二 secondNum;break; default:firstNum = firstNum;} edit->setText(QString::number(firstNum));} void CWidget::setValue(){QString tempStr; tempStr = edit->text();tempStrif(tempStr.length() < edit->maxLength())大位数tempStr + 二((QPushBu卄on *)sender())->text(); tempStrelseQMessageBox::inform otion( this,trf'Calculato^^trfloo long!”));〃位数过多,报错}if (-looper) 〃没有按加减乘除、等于、清空键{firstNum = tempStr.tolnt(); 〃把tempStr 转换成整型数,赋给第一个计算数edit->setText(QString::nurnber(firstNum)); 〃变成字符串之后,显示〃响应按键调用计算〃加法〃减法〃乘法〃显示框中的数值赋给〃小于显示框允许的最〃将按键对应的数值添加secondNum 二 tempStr.tolnt(); edit->setText(QString::nurnber(secondNurn));void CWidget::setOper() 的语言 {QString str=((QPushButton *)sender())->text(); if (str == ”+”)on Clicked (Qt::Key_Plus);称else if(str 二二叮)on Clicked (Qt::Key.Mi nus);称。

Qt编写计算器(界面)

Qt编写计算器(界面)

Qt编写计算器(界⾯)看了⼏个视频,写了个计算器的界⾯#include <QApplication>#include <QWidget>#include <QLineEdit>#include <QPushButton>int main(int argc, char *argv[]){QApplication a(argc, argv);QWidget* w = new QWidget(NULL,Qt::WindowCloseButtonHint);//没有最⼤最⼩化按钮QLineEdit* Le = new QLineEdit(w);QPushButton* Button[20] = {0};const char* BtnText[20]={"7","8","9","+","(","4","5","6","-",")","1","2","3","*","<-","0",".","=","/","C"};Le->move(10,10);Le->resize(240,30);Le->setReadOnly(true);//⽂本框只读,不能通过键盘输⼊for(int i = 0;i<4;i++){for(int j = 0;j<5;j++){Button[i*5+j] = new QPushButton(w);Button[i*5+j]->resize(40,40);Button[i*5+j]->move(10 + (10 + 40)*j,(10+40) + (10 + 40)*i);Button[i*5+j]->setText(BtnText[i*5+j]);}}w->setWindowTitle("计算器");w->show();w->setFixedSize(w->width(),w->height());//锁定窗⼝⼤⼩/** w->show();* w->setFixedSize(w->width(),w->height());//锁定窗⼝⼤⼩* 这两句顺序不能反*/return a.exec();}运⾏界⾯如下。

Qt制作计算器总结(一)

Qt制作计算器总结(一)

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

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

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

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

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

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

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

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

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

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

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

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

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

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

实训项目3QT程序源码与编译过程

实训项目3QT程序源码与编译过程

实训项目3QT程序源码与编译过程以下是一个使用Qt编写的简单程序源码和编译过程的示例:```c++#include <QApplication>#include <QLabel>int main(int argc, char *argv[])QApplication app(argc, argv);QLabel label("Hello, Qt!");label.show(;return app.exec(;```接下来,我们将介绍如何编译这个程序。

接下来,打开终端(对于Windows用户,打开命令提示符),进入保存有`main.cpp`文件的目录。

然后,使用Qt提供的命令行工具`qmake`来创建一个项目文件(`pro`文件),用于编译和构建应用程序。

在终端中输入以下命令:```qmake -project```这会生成一个名为`<项目名称>.pro`的文件。

默认情况下,它的名字与`main.cpp`文件的名字相同。

```QT += widgets```这会告诉Qt编译器需要使用Qt Widgets模块。

保存并关闭`<项目名称>.pro`文件。

然后```qmake```这会在当前目录中生成一个名为`Makefile`的文件。

最后,使用`make`命令编译和构建应用程序:```make```这将生成一个可执行文件,其默认名称为程序的目录名。

现在,你可以运行生成的可执行文件来启动你的Qt程序:```./<可执行文件名>```这样,你的程序就会在应用程序窗口中显示出来。

这是一个简单的Qt程序的源码和编译过程的示例。

你可以根据需要修改和扩展这个程序,创建自己的Qt应用程序。

Qt制作计算器总结(二)

Qt制作计算器总结(二)

Qt制作计算器总结(二)Qt制作计算器总结:1. 介绍Qt:Qt是一个跨平台的C++应用程序开发框架,它提供了丰富的图形界面和多种功能模块,可以用来开发各种类型的应用程序。

2. 计算器的基本功能:计算器是一个基本的应用程序,它的主要功能是进行数学计算。

一般来说,计算器需要支持基本的加减乘除四则运算,以及括号、百分号等高级运算。

3. Qt实现计算器的方法:Qt提供了丰富的图形界面控件和信号槽机制,可以很方便地实现计算器的界面和功能。

具体来说,可以使用QLineEdit控件实现输入框,QLabel控件实现显示框,QPushButton控件实现按钮等。

4. Qt计算器的实现步骤:首先需要设计计算器的界面,包括输入框、显示框、按钮等控件的布局和样式。

然后需要设置信号槽,将按钮的点击事件与计算器的功能函数相连接。

最后需要编写计算器的功能函数,实现各种数学运算。

5. Qt计算器的优化:为了提高计算器的用户体验和性能,可以对计算器进行优化。

例如,可以添加历史记录功能,方便用户查看之前的计算结果。

还可以添加自动补全功能,提高用户输入的效率。

此外,可以对计算器的代码进行优化,提高程序的运行速度和稳定性。

6. Qt计算器的应用场景:计算器是一个非常基础的应用程序,广泛应用于各个领域。

例如,学生可以使用计算器进行数学计算,工程师可以使用计算器进行工程计算,金融从业者可以使用计算器进行财务计算等。

7. 总结:Qt制作计算器是一个相对简单的应用程序开发项目,但也需要掌握一定的基础知识和技能。

通过本文的介绍,读者可以了解到Qt 制作计算器的基本方法和优化技巧,为自己的应用程序开发之路打下基础。

Qt-简易计算器

Qt-简易计算器

Qt-简易计算器的制作
需求分析:满足简单的加减乘除运算即可,主要为了了解Qt的编程、运行机制。

了解Qt 开发软件的基本流程。

功能设计:计算器包括加减乘除的运算,归零操作。

编码实现步骤:首先我们要在Qcreater下建立一个工程Dialog,项目中包含的文件如下所示:
其中,designer为工程名,.pro文件是工程文件,mainwindow.h是头文件,里面的内容包括如下两个图:
(1)
(2)
这里面主要包含了一些头文件、变量、信号、槽等的定义于实现。

Main.cpp中主要是运行的初始化工作,内容如下:
Main.cpp主要包含了各种功能的实现,内容如下:
(1)
(2)
(3)
(4)
(5)
最后的.ui文件是界面元素的文件,这个可以通过Qtdesinger来实现。

其中要用的的槽有如下:
所有的信号和槽连接的情况如下图:
运行情况:
有想要源代码的朋友可以加QQ421764765或@坐标Y免费提供。

qt 计算表达式

qt 计算表达式

qt 计算表达式Qt 是一个强大的跨平台 C++ 应用程序框架,用于开发 GUI 应用程序。

如果你想在 Qt 中计算一个表达式,你可以使用 QScriptEngine 类。

这个类提供了一个 JavaScript 引擎,可以用来解析和执行 JavaScript 代码。

以下是一个简单的例子,展示了如何在 Qt 中使用 QScriptEngine 来计算一个数学表达式:```cppinclude <QApplication>include <QScriptEngine>include <QDebug>int main(int argc, char argv){QApplication app(argc, argv);QScriptEngine engine;QScriptValue result = ("1 + 2 3"); // 计算表达式 1 + 2 3if (()) {qDebug() << "Error:" << ();} else {qDebug() << "Result:" << (); // 输出结果}return ();}```在这个例子中,我们创建了一个 QScriptEngine 对象,并使用 `evaluate()` 方法来计算一个简单的数学表达式。

如果表达式计算成功,`evaluate()` 方法将返回一个 `QScriptValue` 对象,我们可以使用 `toNumber()` 方法将其转换为数字,并输出结果。

如果表达式计算失败,`evaluate()` 方法将返回一个错误对象,我们可以使用 `toString()` 方法将其转换为字符串,并输出错误信息。

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()));

qt5计算器代码

qt5计算器代码

Qt计算器源代码caculator.h头文件#ifndef CACULATOR_H#define CACULATOR_H#include <QDialog>#include <QLineEdit>#include <QPushButton>#include <QCloseEvent>#include <QKeyEvent>#include <QMessageBox>#include <QDebug>#include <QGridLayout>#include <QStack>#include "math.h"namespace Ui {class Caculator;}class Caculator : public QDialog{Q_OBJECTpublic:explicit Caculator(QWidget *parent = 0);~Caculator();void widgetInitial();//初始化控件void widgetLayout();//设置窗口布局void pushButtonStyle(QPushButton *pushButton);//设置按钮样式void lineEditStyle(QLineEdit *lineEdit,int height);//设置输入框样式void setNumber(int num);//设置数字void setOperation(int oper);//设置+、-、*、/、.、)等符号void caculate(int cacu);//计算x^2、x^3、sin、cos、tan等long factorial(int num);//计算阶乘//中缀转换为后缀表达式int toPostfix(const char *S,char OPS[],int &len);//计算后缀表达式int evaluation (char B[], int len, double &result,bool &flag);protected:void closeEvent(QCloseEvent *event);//窗口关闭事件void keyPressEvent(QKeyEvent *key);//按键事件private:Ui::Caculator *ui;//计算器相关控件QLineEdit *showTextEdit; //表达式显示栏QLineEdit *showResultEdit; //结果显示栏QPushButton *backBtn; //回退QPushButton *ceBtn; //清除QPushButton *clearBtn; //清空QPushButton *oneBtn;QPushButton *twoBtn;QPushButton *threeBtn;QPushButton *fourBtn;QPushButton *fiveBtn;QPushButton *sixBtn;QPushButton *sevenBtn;QPushButton *eightBtn;QPushButton *nineBtn;QPushButton *zeroBtn;QPushButton *pointBtn; //.QPushButton *left_bracket; //(QPushButton *right_bracket; //)//内存管理QPushButton *clearMemoryBtn; //创建清除内存按钮QPushButton *readMemoryBtn; //创建读内存按钮QPushButton *setMemoryBtn; //创建设置内存按钮//运算QPushButton *signBtn; //+/-QPushButton *addBtn;QPushButton *subBtn;QPushButton *mulBtn;QPushButton *divideBtn;QPushButton *sqrtBtn; //开方QPushButton *squBtn; //平方QPushButton *cubeBtn; //立方QPushButton *logBtn;QPushButton *recipBtn; //倒数QPushButton *factBtn; //阶乘QPushButton *sinBtn;QPushButton *cosBtn;QPushButton *tanBtn;QPushButton *InBtn; //对数QPushButton *tenxBtn;QPushButton *expBtn;QPushButton *sinhBtn;QPushButton *coshBtn;QPushButton *tanhBtn;QPushButton *xyBtn; //x^yQPushButton *modBtn; //取模QPushButton *equalBtn;double sumMemory;private slots://按钮所关联的槽函数void clearMemoryBtnSlot();void readMemoryBtnSlot();void setMemoryBtnSlot();void signBtnSlot();void sqrtBtnSlot();void sinBtnSlot();void backBtnSlot();void ceBtnSlot();void clearBtnSlot();void squBtnSlot();void cosBtnSlot();void sevenBtnSlot();void eightBtnSlot();void nineBtnSlot();void divideBtnSlot();void cubeBtnSlot();void tanBtnSlot();void fourBtnSlot();void fiveBtnSlot();void sixBtnSlot();void mulBtnSlot();void logBtnSlot();void InBtnSlot();void oneBtnSlot();void twoBtnSlot();void threeBtnSlot();void subBtnSlot();void recipBtnSlot();void tenxBtnSlot();void zeroBtnSlot();void pointBtnSlot();void addBtnSlot();void factBtnSlot();void equalBtnSlot();void expBtnSlot();void sinhBtnSlot();void coshBtnSlot();void tanhBtnSlot();void xyBtnSlot();void modBtnSlot();void left_bracketSlot();void right_bracketSlot();};#endif // CACULATOR_Hcaculator.cpp源文件#include "caculator.h"#include "ui_caculator.h"Caculator::Caculator(QWidget *parent) :QDialog(parent),ui(new Ui::Caculator){ui->setupUi(this);this->widgetInitial();this->widgetLayout();}Caculator::~Caculator(){delete ui;}//初始化控件void Caculator::widgetInitial(){this->setWindowFlags(Qt::WindowCloseButtonHint);this->setWindowTitle("计算器");this->setFixedSize(this->width(),this->height());showTextEdit=new QLineEdit(this);showTextEdit->setText("");showResultEdit=new QLineEdit(this); showResultEdit->setText("0");backBtn=new QPushButton(this); backBtn->setText("←");ceBtn=new QPushButton(this);ceBtn->setText("CE");clearBtn=new QPushButton(this); clearBtn->setText("C");oneBtn=new QPushButton(this);oneBtn->setText("1");twoBtn=new QPushButton(this);twoBtn->setText("2");threeBtn=new QPushButton(this); threeBtn->setText("3");fourBtn=new QPushButton(this); fourBtn->setText("4");fiveBtn=new QPushButton(this);fiveBtn->setText("5");sixBtn=new QPushButton(this);sixBtn->setText("6");sevenBtn=new QPushButton(this); sevenBtn->setText("7");eightBtn=new QPushButton(this); eightBtn->setText("8");nineBtn=new QPushButton(this); nineBtn->setText("9");zeroBtn=new QPushButton(this); zeroBtn->setText("0");pointBtn=new QPushButton(this); pointBtn->setText("."); clearMemoryBtn=new QPushButton(this); clearMemoryBtn->setText("MC"); readMemoryBtn=new QPushButton(this); readMemoryBtn->setText("MR"); setMemoryBtn=new QPushButton(this); setMemoryBtn->setText("MS"); signBtn=new QPushButton(this); signBtn->setText("\302\261");addBtn=new QPushButton(this);addBtn->setText("+");subBtn=new QPushButton(this);subBtn->setText("-");mulBtn=new QPushButton(this);mulBtn->setText("*");divideBtn=new QPushButton(this); divideBtn->setText("/");right_bracket=new QPushButton(this); right_bracket->setText(")");left_bracket=new QPushButton(this); left_bracket->setText("(");sqrtBtn=new QPushButton(this); sqrtBtn->setText("√");squBtn=new QPushButton(this); squBtn->setText("x²");cubeBtn=new QPushButton(this); cubeBtn->setText("x³");logBtn=new QPushButton(this); logBtn->setText("log");recipBtn=new QPushButton(this); recipBtn->setText("1/x");factBtn=new QPushButton(this); factBtn->setText("n!");sinBtn=new QPushButton(this); sinBtn->setText("sin");cosBtn=new QPushButton(this); cosBtn->setText("cos");tanBtn=new QPushButton(this); tanBtn->setText("tan");InBtn=new QPushButton(this);InBtn->setText("In");tenxBtn=new QPushButton(this); tenxBtn->setText("10^x");expBtn=new QPushButton(this); expBtn->setText("Exp");sinhBtn=new QPushButton(this); sinhBtn->setText("sinh");coshBtn=new QPushButton(this); coshBtn->setText("cosh");tanhBtn=new QPushButton(this); tanhBtn->setText("tanh");xyBtn=new QPushButton(this); xyBtn->setText("x^y");modBtn=new QPushButton(this); modBtn->setText("Mod");equalBtn=new QPushButton(this); equalBtn->setText("="); sumMemory=0.0;//设置样式lineEditStyle(showTextEdit,30); lineEditStyle(showResultEdit,30); pushButtonStyle(clearMemoryBtn); pushButtonStyle(readMemoryBtn); pushButtonStyle(setMemoryBtn); pushButtonStyle(signBtn); pushButtonStyle(sqrtBtn); pushButtonStyle(sinBtn); pushButtonStyle(backBtn); pushButtonStyle(ceBtn); pushButtonStyle(clearBtn); pushButtonStyle(squBtn); pushButtonStyle(cosBtn); pushButtonStyle(left_bracket); pushButtonStyle(right_bracket); pushButtonStyle(sevenBtn); pushButtonStyle(eightBtn); pushButtonStyle(nineBtn); pushButtonStyle(divideBtn); pushButtonStyle(cubeBtn); pushButtonStyle(tanBtn); pushButtonStyle(fourBtn); pushButtonStyle(fiveBtn); pushButtonStyle(sixBtn); pushButtonStyle(mulBtn); pushButtonStyle(logBtn); pushButtonStyle(InBtn); pushButtonStyle(oneBtn); pushButtonStyle(twoBtn); pushButtonStyle(threeBtn); pushButtonStyle(subBtn); pushButtonStyle(recipBtn); pushButtonStyle(tenxBtn); pushButtonStyle(zeroBtn); pushButtonStyle(pointBtn); pushButtonStyle(addBtn); pushButtonStyle(factBtn); pushButtonStyle(equalBtn); pushButtonStyle(expBtn); pushButtonStyle(sinhBtn); pushButtonStyle(coshBtn); pushButtonStyle(tanhBtn); pushButtonStyle(xyBtn);pushButtonStyle(modBtn);//关联信号和槽connect(clearMemoryBtn,SIGNAL(clicked(bool)),this,SLOT(clearMemoryBtnSlot()) );connect(readMemoryBtn,SIGNAL(clicked(bool)),this,SLOT(readMemoryBtnSlot())); connect(setMemoryBtn,SIGNAL(clicked(bool)),this,SLOT(setMemoryBtnSlot()));connect(signBtn,SIGNAL(clicked(bool)),this,SLOT(signBtnSlot()));connect(sqrtBtn,SIGNAL(clicked(bool)),this,SLOT(sqrtBtnSlot()));connect(sinBtn,SIGNAL(clicked(bool)),this,SLOT(sinBtnSlot()));connect(backBtn,SIGNAL(clicked(bool)),this,SLOT(backBtnSlot()));connect(ceBtn,SIGNAL(clicked(bool)),this,SLOT(ceBtnSlot()));connect(clearBtn,SIGNAL(clicked(bool)),this,SLOT(clearBtnSlot()));connect(squBtn,SIGNAL(clicked(bool)),this,SLOT(squBtnSlot()));connect(cosBtn,SIGNAL(clicked(bool)),this,SLOT(cosBtnSlot()));connect(left_bracket,SIGNAL(clicked(bool)),this,SLOT(left_bracketSlot()));connect(right_bracket,SIGNAL(clicked(bool)),this,SLOT(right_bracketSlot()));connect(sevenBtn,SIGNAL(clicked(bool)),this,SLOT(sevenBtnSlot()));connect(eightBtn,SIGNAL(clicked(bool)),this,SLOT(eightBtnSlot()));connect(nineBtn,SIGNAL(clicked(bool)),this,SLOT(nineBtnSlot()));connect(divideBtn,SIGNAL(clicked(bool)),this,SLOT(divideBtnSlot()));connect(cubeBtn,SIGNAL(clicked(bool)),this,SLOT(cubeBtnSlot()));connect(tanBtn,SIGNAL(clicked(bool)),this,SLOT(tanBtnSlot()));connect(fourBtn,SIGNAL(clicked(bool)),this,SLOT(fourBtnSlot()));connect(fiveBtn,SIGNAL(clicked(bool)),this,SLOT(fiveBtnSlot()));connect(sixBtn,SIGNAL(clicked(bool)),this,SLOT(sixBtnSlot()));connect(mulBtn,SIGNAL(clicked(bool)),this,SLOT(mulBtnSlot()));connect(logBtn,SIGNAL(clicked(bool)),this,SLOT(logBtnSlot()));connect(InBtn,SIGNAL(clicked(bool)),this,SLOT(InBtnSlot()));connect(oneBtn,SIGNAL(clicked(bool)),this,SLOT(oneBtnSlot()));connect(twoBtn,SIGNAL(clicked(bool)),this,SLOT(twoBtnSlot()));connect(threeBtn,SIGNAL(clicked(bool)),this,SLOT(threeBtnSlot()));connect(subBtn,SIGNAL(clicked(bool)),this,SLOT(subBtnSlot()));connect(recipBtn,SIGNAL(clicked(bool)),this,SLOT(recipBtnSlot()));connect(tenxBtn,SIGNAL(clicked(bool)),this,SLOT(tenxBtnSlot()));connect(zeroBtn,SIGNAL(clicked(bool)),this,SLOT(zeroBtnSlot()));connect(pointBtn,SIGNAL(clicked(bool)),this,SLOT(pointBtnSlot()));connect(addBtn,SIGNAL(clicked(bool)),this,SLOT(addBtnSlot()));connect(factBtn,SIGNAL(clicked(bool)),this,SLOT(factBtnSlot()));connect(equalBtn,SIGNAL(clicked(bool)),this,SLOT(equalBtnSlot()));connect(expBtn,SIGNAL(clicked(bool)),this,SLOT(expBtnSlot()));connect(sinhBtn,SIGNAL(clicked(bool)),this,SLOT(sinhBtnSlot()));connect(coshBtn,SIGNAL(clicked(bool)),this,SLOT(coshBtnSlot()));connect(tanhBtn,SIGNAL(clicked(bool)),this,SLOT(tanhBtnSlot()));connect(xyBtn,SIGNAL(clicked(bool)),this,SLOT(xyBtnSlot()));connect(modBtn,SIGNAL(clicked(bool)),this,SLOT(modBtnSlot())); }//设置窗口布局void Caculator::widgetLayout(){QGridLayout *mainLayout = new QGridLayout(this);//网格布局mainLayout->setSizeConstraint(QLayout::SetFixedSize);mainLayout->addWidget(showTextEdit , 0,0 ,1 ,7);mainLayout->addWidget(showResultEdit,1,0,1,7);mainLayout->addWidget(clearMemoryBtn,2,0);mainLayout->addWidget(readMemoryBtn,2,1);mainLayout->addWidget(setMemoryBtn,2,2);mainLayout->addWidget(signBtn,2,3);mainLayout->addWidget(sqrtBtn,2,4);mainLayout->addWidget(sinBtn,2,5);mainLayout->addWidget(sinhBtn,2,6);mainLayout->addWidget(backBtn,3,0);mainLayout->addWidget(ceBtn,3,1);mainLayout->addWidget(clearBtn,3,2);mainLayout->addWidget(divideBtn,3,3);mainLayout->addWidget(squBtn,3,4);mainLayout->addWidget(cosBtn,3,5);mainLayout->addWidget(coshBtn,3,6);mainLayout->addWidget(sevenBtn,4,0);mainLayout->addWidget(eightBtn,4,1);mainLayout->addWidget(nineBtn,4,2);mainLayout->addWidget(mulBtn,4,3);mainLayout->addWidget(cubeBtn,4,4);mainLayout->addWidget(tanBtn,4,5);mainLayout->addWidget(tanhBtn,4,6);mainLayout->addWidget(fourBtn,5,0);mainLayout->addWidget(fiveBtn,5,1);mainLayout->addWidget(sixBtn,5,2);mainLayout->addWidget(subBtn,5,3);mainLayout->addWidget(logBtn,5,4);mainLayout->addWidget(InBtn,5,5);mainLayout->addWidget(xyBtn,5,6);mainLayout->addWidget(oneBtn,6,0);mainLayout->addWidget(twoBtn,6,1);mainLayout->addWidget(threeBtn,6,2);mainLayout->addWidget(addBtn,6,3);mainLayout->addWidget(recipBtn,6,4);mainLayout->addWidget(tenxBtn,6,5);mainLayout->addWidget(modBtn,6,6);mainLayout->addWidget(zeroBtn,7,0);mainLayout->addWidget(pointBtn,7,1);mainLayout->addWidget(left_bracket,7,2);mainLayout->addWidget(right_bracket,7,3);mainLayout->addWidget(factBtn,7,4);mainLayout->addWidget(expBtn,7,5);mainLayout->addWidget(equalBtn,7,6);}//按钮样式void Caculator::pushButtonStyle(QPushButton *pushButton){QFont font("宋体",12);font.setBold(true);QString styleStr="border:1px solid gray;border-radius:5px;";pushButton->setStyleSheet(styleStr);pushButton->setFont(font);pushButton->setFixedSize(45,35);}//输入框样式void Caculator::lineEditStyle(QLineEdit *lineEdit,int height){QFont font("宋体",14);font.setBold(true);QString styleStr="border:1px solid gray;border-radius:10px;";lineEdit->setStyleSheet(styleStr);lineEdit->setReadOnly(true);lineEdit->setAlignment(Qt::AlignRight);lineEdit->setFont(font);lineEdit->setMinimumHeight(height);}//设置数字void Caculator::setNumber(int num){showTextEdit->setText(showTextEdit->text().trimmed() + QString::number(num));}//设置+、-、*、/、.、)等符号void Caculator::setOperation(int oper){if(!showTextEdit->text().isEmpty())int endIndex=showTextEdit->text().length()-1;QChar endChar=showTextEdit->text().at(endIndex);if(endChar!='+'&&endChar!='-'&&endChar!='*'&&endChar!='/'&&endChar!='.'&&e ndChar!='('&&endChar!='%'&&endChar!='^'){switch (oper){case 1:showTextEdit->setText(showTextEdit->text() + "+");break;case 2:showTextEdit->setText(showTextEdit->text() + "-");break;case 3:showTextEdit->setText(showTextEdit->text() + "*");break;case 4:showTextEdit->setText(showTextEdit->text() + "/");break;case 5:showTextEdit->setText(showTextEdit->text() + ".");break;case 6:showTextEdit->setText(showTextEdit->text() + ")");break;case 7:showTextEdit->setText(showTextEdit->text() + "^");break;case 8:showTextEdit->setText(showTextEdit->text() + "%");break;default:break;}}}}//计算x^2、x^3、sin、cos、tan等void Caculator::caculate(int cacu){double result;if(!showTextEdit->text().isEmpty())QString text=showTextEdit->text();int endIndex=text.length()-1;QChar endChar=text.at(endIndex);if(endChar!='+'&&endChar!='-'&&endChar!='*'&&endChar!='/'&&endChar!='.'&&endChar!='('&&endChar!=')'&&endChar!='%'&&endChar!='^'){double text_to_double=text.toDouble();switch (cacu) {case 1://开方if(text_to_double>=0){result=sqrt(text_to_double);showTextEdit->setText("sqrt("+QString::number(text_to_double)+")");}else{QMessageBox::warning(this,"警告","<b>被开方数不能为负!</b>");return;}break;case 2://平方result=pow(text_to_double,2.0);showTextEdit->setText("square("+QString::number(text_to_double)+")");break;case 3://立方result=pow(text_to_double,3.0);showTextEdit->setText("cube("+QString::number(text_to_double)+")");break;case 4://log10result=log10(text_to_double);showTextEdit->setText("log("+QString::number(text_to_double)+")");break;case 5://1/xresult=pow(text_to_double,-1.0);showTextEdit->setText("reciproc("+QString::number(text_to_double)+")");break;case 6://阶乘result=factorial((int)text_to_double);showTextEdit->setText("factorial("+QString::number(text_to_double)+")");break;case 7://sinresult=sin(text_to_double);showTextEdit->setText("sin("+QString::number(text_to_double)+")");break;case 8://cosresult=cos(text_to_double);showTextEdit->setText("cos("+QString::number(text_to_double)+")");break;case 9://tanresult=tan(text_to_double);showTextEdit->setText("tan("+QString::number(text_to_double)+")");break;case 10://Inresult=log(text_to_double);showTextEdit->setText("In("+QString::number(text_to_double)+")");break;case 11://10^xresult=pow(10,text_to_double);showTextEdit->setText("10^("+QString::number(text_to_double)+")");break;case 12://e^xresult=exp(text_to_double);showTextEdit->setText("e^("+QString::number(text_to_double)+")");break;case 13://sinhresult=sinh(text_to_double);showTextEdit->setText("sinh("+QString::number(text_to_double)+")");break;case 14://coshresult=cosh(text_to_double);showTextEdit->setText("cosh("+QString::number(text_to_double)+")");break;case 15://tanhresult=tanh(text_to_double);showTextEdit->setText("tanh("+QString::number(text_to_double)+")");break;default:break;}showResultEdit->clear();showResultEdit->setText(QString::number(result));}}}//计算阶乘long Caculator::factorial(int num){if(num<0){QMessageBox::warning(this,"警告","<b>阶乘数不能小于0!</b>");return -1;}long fac=1;for(int i=1;i<=num;i++){fac=fac*i;}return fac;}//关闭窗口事件void Caculator::closeEvent(QCloseEvent *event){QMessageBox msgBox;msgBox.setWindowTitle("提示");msgBox.setText("<b>您确定要退出吗?</b>");msgBox.setStandardButtons(QMessageBox::Ok | QMessageBox::Cancel);msgBox.setDefaultButton(QMessageBox::Ok);msgBox.setButtonText (QMessageBox::Ok,QString("确定"));msgBox.setButtonText (QMessageBox::Cancel,QString("取消"));int ret = msgBox.exec();switch (ret) {case QMessageBox::Ok:event->accept();break;case QMessageBox::Cancel:event->ignore();break;default:break;}}//按键事件void Caculator::keyPressEvent(QKeyEvent *key){switch (key->key()) {case Qt::Key_0:zeroBtnSlot();break;case Qt::Key_1:oneBtnSlot();break;case Qt::Key_2:twoBtnSlot();break;case Qt::Key_3:threeBtnSlot();break;case Qt::Key_4:fourBtnSlot();break;case Qt::Key_5:fiveBtnSlot();break;case Qt::Key_6:sixBtnSlot();break;case Qt::Key_7:sevenBtnSlot();break;case Qt::Key_8:eightBtnSlot();break;case Qt::Key_9:nineBtnSlot();break;case Qt::Key_Plus:addBtnSlot();break; // +case Qt::Key_Minus:subBtnSlot();break; // -case Qt::Key_Asterisk:mulBtnSlot();break; // *case Qt::Key_Slash:divideBtnSlot();break; // /c ase Qt::Key_Backspace:backBtnSlot();break; // ←case Qt::Key_Enter:equalBtnSlot();break; // =case Qt::Key_Period:pointBtnSlot();break; // .case Qt::Key_BraceLeft:left_bracketSlot();break; // (case Qt::Key_BraceRight:right_bracketSlot();break; // ) case Qt::Key_Percent:modBtnSlot();break; // %default:break;}}//清空内存void Caculator::clearMemoryBtnSlot(){sumMemory=0.0;}//读取内存void Caculator::readMemoryBtnSlot(){showTextEdit->setText(QString::number(sumMemory)); }//设置内存void Caculator::setMemoryBtnSlot(){equalBtnSlot();sumMemory = showTextEdit->text().toDouble(); }//正负号void Caculator::signBtnSlot(){QString temp=showTextEdit->text().trimmed();//判断是否位负数if(temp.startsWith("-")){temp = temp.mid(1);showTextEdit->setText(temp);return;}temp = temp.insert(0, "-");showTextEdit->setText(temp);}void Caculator::sqrtBtnSlot(){caculate(1);}void Caculator::sinBtnSlot(){caculate(7);}void Caculator::backBtnSlot(){if(!showTextEdit->text().trimmed().isEmpty()){QString text=showTextEdit->text();text.chop(1);showTextEdit->setText(text);}}void Caculator::ceBtnSlot(){showResultEdit->setText("0");}void Caculator::clearBtnSlot(){showTextEdit->clear();showResultEdit->setText("0"); }void Caculator::squBtnSlot(){caculate(2);}void Caculator::cosBtnSlot(){caculate(8);}void Caculator::sevenBtnSlot() {setNumber(7);}void Caculator::eightBtnSlot() {setNumber(8);}void Caculator::nineBtnSlot(){setNumber(9);}void Caculator::divideBtnSlot() {setOperation(4);}void Caculator::cubeBtnSlot(){caculate(3);}void Caculator::tanBtnSlot(){caculate(9);}void Caculator::fourBtnSlot(){setNumber(4);}void Caculator::fiveBtnSlot(){setNumber(5);}void Caculator::sixBtnSlot(){}void Caculator::mulBtnSlot(){setOperation(3);}void Caculator::logBtnSlot(){caculate(4);}void Caculator::InBtnSlot(){caculate(10);}void Caculator::oneBtnSlot(){setNumber(1);}void Caculator::twoBtnSlot(){setNumber(2);}void Caculator::threeBtnSlot() {setNumber(3);}void Caculator::subBtnSlot(){setOperation(2);}void Caculator::recipBtnSlot() {caculate(5);}void Caculator::tenxBtnSlot(){caculate(11);}void Caculator::zeroBtnSlot(){if(showTextEdit->text()=="0"){return;}}void Caculator::pointBtnSlot(){setOperation(5);}void Caculator::addBtnSlot(){setOperation(1);}void Caculator::factBtnSlot(){caculate(6);}void Caculator::equalBtnSlot(){std::string str=showTextEdit->text().toStdString();const char *S=str.c_str();char OPS[50];int len;double result;QString change;bool flag;toPostfix(S,OPS,len);evaluation(OPS,len,result,flag);change=QString::number(result,10,6);showResultEdit->setText(change);}void Caculator::left_bracketSlot(){showTextEdit->setText(showTextEdit->text().trimmed() + "("); }void Caculator::right_bracketSlot(){setOperation(6);}void Caculator::expBtnSlot(){caculate(12);}void Caculator::sinhBtnSlot(){caculate(13);}void Caculator::coshBtnSlot(){caculate(14);}void Caculator::tanhBtnSlot(){caculate(15);}void Caculator::xyBtnSlot(){setOperation(7);}void Caculator::modBtnSlot(){setOperation(8);}//中缀转换为后缀表达式,并且调整运算符优先级int Caculator::toPostfix(const char *S, char OPS[], int &len){QStack<char> OPE;int i,j=0;for (i = 0; i < strlen(S); i++){switch (S[i]){case'+':if(OPE.isEmpty())OPE.push(S[i]);else if (OPE.top() == '*' || OPE.top() == '/' ||OPE.top() == '%' ||OPE.top() == '^'){OPS[j++] = OPE.pop();i--;}elseOPE.push(S[i]);break;case'-':if('('!=S[i-1]&&0!=i){if(OPE.isEmpty())OPE.push(S[i]);else if (OPE.top() == '*' || OPE.top() == '/' ||OPE.top() == '%'||OPE.top() == '^'){OPS[j++] = OPE.pop();i--;}elseOPE.push(S[i]);}else{while ((S[i] >= '0'&&S[i] <= '9' )|| S[i] == '.'||('-'==S[i]&&(S[i-1]<'0'||S[i-1]>'9'))){OPS[j++] = S[i];if('-'==S[i])OPS[j++]='@';i++;}i--;OPS[j++] = '#'; //数字中的间隔符}break;case'*':case'/':case'^':case'%':OPE.push(S[i]);break;case'(':OPE.push(S[i]);break;case')':while (OPE.top() != '('){OPS[j++] = OPE.pop();}OPE.pop();break;default:while (S[i] >= '0'&&S[i] <= '9' || S[i] =='.'||('-'==S[i]&&S[i-1]<'0'&&S[i-1]>'9')){OPS[j++] = S[i];i++;}i--;OPS[j++] = '#'; //数字中的间隔符break;}}while (!OPE.isEmpty()){OPS[j++] = OPE.pop();}len = j;return 0;}//计算后缀表达式int Caculator::evaluation(char B[], int len, double &result, bool &flag) {int i;double a;double b;double c;QStack<double>SZ;for (i = 0; i < len; i++){switch (B[i]){case'+':{a = SZ.pop();b = SZ.pop();c = b + a;SZ.push(c);}break;case'-':{if('@'!=B[i+1]){a = SZ.pop();b = SZ.pop();c = b - a;SZ.push(c);}else{int jx = 0;double dx;char *stx = new char[10];while (B[i] != '#'){if('@'!=B[i])stx[jx++] = B[i];i++;}dx = atof(stx);SZ.push(dx);delete stx;}}break;case'*':{a = SZ.pop();b = SZ.pop();c = b*a;SZ.push(c);}break;case'^':{a = SZ.pop();b = SZ.pop();c = pow(b,a);SZ.push(c);}break;case'/':{a = SZ.pop();b = SZ.pop();if (a== 0){flag = false;return 0;}c = b / a;SZ.push(c);}break;case'%':{a = SZ.pop();b = SZ.pop();if (a== 0){flag = false;return 0;}c = (int)b % (int)a;SZ.push(c);}break;default:int j = 0;double d;char *st = new char[10];while (B[i] != '#'){st[j++] = B[i];i++;}d = atof(st);SZ.push(d);delete st;break;}}result=SZ.top();return 0;}main.cpp源文件#include "caculator.h"#include <QApplication>int main(int argc, char *argv[]){QApplication a(argc, argv);Caculator w;w.show();return a.exec();}程序运行截图1.加减乘除四则运算2.x^n3.平方根sqrt4.正弦函数sin5.余弦函数cos6.正切函数tan7.双曲正弦函数sinh8.双曲余弦函数cosh9.双曲正切函数tanh10.In(以e为底)11.log(以10为底)12.取模%。

基于QT的计算器的实现

基于QT的计算器的实现

基于QT的计算器的实现张会摘要:该文利用 Qt框架,应用Qt信号槽机制实现了一个带括号的加减乘除的四则混合运算功能的计算器。

该计算器是一个集继承、图形界面、事件处理等面向对象编程知识的综合应用的实例程序。

关键词:Qt;后缀表达式;计算器;C++中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)32-0276-031 背景Windows系统的“标准计算器”只能实现不判断优先级的简单的加减乘除计算,而不能正确实现带括号的四则混合计算,该文利用Qt图形库,采用C++语法规则,在Qt Creator集成开发环境下,实现了一个基于Qt的计算器,此计算器能帮助学生进一步理解C++中的面向对象程序设计思想。

2 Qt的特点Qt被用于高性能的跨平台软件开发,它是一个标准的技术成熟的C++框架,Qt不仅拥有扩展的C++类库,还提供了大量可用来快速编写应用程序的工具[1] ,Qt是采用C++实现的框架。

Qt Creator是一款新的轻量级集成开发环境(IDE), IDE支持跨平台运行,支持的系统包括 Mac OS X 、Linux( 32 位及 64 位)以及Windows等系统。

Qt Creator的设计目标是方便开发人员利用 Qt这个应用程序框架更加快速、轻易地完成相关开发任务[2]。

3 功能设计计算器主要实现了以下功能:1)输入包含括号的四则混合运算计算式。

2)单击等号按钮自动按先计算乘除再计算加减,有括号先计算括号的计算原则进行四则混合运算功能。

3)退格功能,单击退格按钮,实现把输入的计算表达式最后一个数字或运算符删除,以实现对错误输入的内容删除后进行修改。

4)清空功能,单击C清空按钮,可以直接将输入的所有内容清除掉,而不需要用退格键逐一删除,5)小数点只能输入一次,当一个小数已经输入了一个小数点后,此数无法再输入一个小数点,从而保证小数点在一个小数中的唯一性。

6)计算完一次结果后,当重新输入计算表达式想实现再次计算时,会自动把前一次的结果直接清除掉,而不需要单击清空按钮清除上次计算结果后再计算。

基于QT的计算器程序

基于QT的计算器程序
Байду номын сангаас
//清除键按下 //计算方式按下
//浮点建按下
// 设 置显 示 汉
//计算方式槽
PDF 文件使用 "pdfFactory Pro" 试用版本创建
{ QString str=((QPushButton *)sender())->text(); //读取按键中的自付出付给 str floatflag=0; //浮点标志清零 floatcount=0; //浮点位数清零 negativeflag=0;
//布局管理
connect(button[0],SIGNAL(clicked()),this,SLOT(clickedslot())); //数字按下 connect(button[1],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[2],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[4],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[5],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[6],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[8],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[9],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[10],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[12],SIGNAL(clicked()),this,SLOT(clickedslot())); connect(button[18],SIGNAL(clicked()),this,SLOT(equal())); connect(button[16],SIGNAL(clicked()),this,SLOT(close())); //等于号按下 //关闭窗口

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的简易计算器,实现基本的四则运算功能。

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

一、需求分析根据题目要求,设计一个简易计算器,需具备以下功能: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. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
firstNum += secondNum;break;
case Qt::Key_Minus:
firstNum -= secondNum;break;
case Qt::Key_Asterisk:
firstNum *= secondNum;break;
case Qt::Key_Slash:
bottomLayout = new QGridLayout(mainLayout,4,4,10);
int n;
for(int r=0; r<3; r++)
for(int c=0; c<3; c++)
{
n = c+3*r;
button[n] = new QPushButton(buttontext[n],this,buttontext[n]);
connect(button[9],SIGNAL(clicked()),this,SLOT(setOper()));
button[10] = new QPushButton(buttontext[10],this,buttontext[10]);
button[10]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[10],1,3);
connect(button[10],SIGNAL(clicked()),this,SLOT(setOper()));
button[11] = new QPushButton(buttontext[11],this,buttontext[11]);
int main(int argc, char **argv)
{
int result = 0;
QApplication app(argc, argv);
CWidget *main = new CWidget();
main->setCaption("Calculater");
button[n]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[n],r,c);
connect(button[n],SIGNAL(clicked()),this,SLOT(setValue()));
Hale Waihona Puke if(-1==oper)
{
firstNum = tempStr.toInt();
edit->setText(QString::number(firstNum));
}
else
{
secondNum = tempStr.toInt();
edit->setText(QString::number(secondNum));
{
Q_OBJECT
public:
CWidget(QWidget *parent=0, char *name=0);
~CWidget();
private:
QLineEdit *edit;
QPushButton *button[16];
QVBoxLayout *mainLayout;
edit->setAlignment(Qt::AlignRight);
edit->setMaxLength(9);
edit->setText(tr("%1").arg(0));
edit->setReadOnly(true);
topLayout->addWidget(edit);
firstNum /= secondNum;break;
default:
firstNum = firstNum;
}
edit->setText(QString::number(firstNum));
}
void CWidget::setValue()
{
QString tempStr;
{
edit->clear();
edit->setText(tr("%1").arg(0));
initialize();
}
void CWidget::initialize()
{
firstNum = 0;
secondNum = 0;
oper = -1;
}
void CWidget::createForm()
}
button[9] = new QPushButton(buttontext[9],this,buttontext[9]);
button[9]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[9],0,3);
{
delete edit;
delete *button;
delete mainLayout;
delete topLayout;
delete bottomLayout;
}
void CWidget::calculate()
{
switch(oper)
{
case Qt::Key_Plus:
void clear();
protected:
virtual bool event(QEvent *e);
private:
void initialize();
void createForm();
void onClicked(int key);
};
#endif
===========================================================================================
app.connect(&app,SIGNAL(lastWindowClosed()),SLOT(quit()));
main->show();
result = app.exec();
return result;
}
==========================================================================================
else if(str == "*")
onClicked(Qt::Key_Asterisk);
else if(str == "/")
onClicked(Qt::Key_Slash);
else if(str == "=")
calculate();
}
void CWidget::clear()
button[11]->setFixedSize(BUTTONWIDTH,BUTTONHEIGHT);
bottomLayout->addWidget(button[11],2,3);
connect(button[11],SIGNAL(clicked()),this,SLOT(setOper()));
#define KEY_2 "2"
#define KEY_3 "3"
#define KEY_4 "4"
#define KEY_5 "5"
#define KEY_6 "6"
#define KEY_7 "7"
#define KEY_8 "8"
#define KEY_ADD "+"
#define KEY_SUB "-"
#define KEY_MUL "*"
#define KEY_DIV "/"
#define KEY_EQ "="
#define KEY_0 "0"
#define KEY_1 "1"
cwidget.h
==========================================================================================
#ifndef CWIDGET_H
#define CWIDGET_H
#include <qapplication.h>
qt计算器实现源码
main.cpp
============================================================================================
#include "cwidget.h"
#include <qapplication.h>
}
}
void CWidget::setOper()
{
QString str=((QPushButton *)sender())->text();
if(str == "+")
onClicked(Qt::Key_Plus);
相关文档
最新文档