ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

c++实现带界面简单计算器

2020-01-21 11:51:36  阅读:393  来源: 互联网

标签:界面 int setText QApplication c++ MyClassClass ui QPushButton 计算器


说明

  • 编辑器使用vs2010,界面设计采用qt4.8.6
  • 本计算器只简单实现带括号的四则运算

界面部分

采用qt直接拖拽,设计如下

相关代码

几乎是自动生成

#ifndef UI_MYCLASS_H
#define UI_MYCLASS_H

#include <QtCore/QVariant>
#include <QtGui/QAction>
#include <QtGui/QApplication>
#include <QtGui/QButtonGroup>
#include <QtGui/QGridLayout>
#include <QtGui/QHeaderView>
#include <QtGui/QLabel>
#include <QtGui/QLineEdit>
#include <QtGui/QMainWindow>
#include <QtGui/QMenuBar>
#include <QtGui/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QToolBar>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_MyClassClass
{
public:
    QWidget *centralWidget;
    QVBoxLayout *verticalLayout;
    QLabel *label;
    QLineEdit *line;
    QGridLayout *gridLayout;
    QPushButton *btn1;
    QPushButton *btn2;
    QPushButton *btn3;
    QPushButton *btn4;
    QPushButton *btn5;
    QPushButton *btn6;
    QPushButton *btn7;
    QPushButton *btn8;
    QPushButton *btn9;
    QPushButton *btn0;
    QPushButton *btnend;
    QPushButton *btnclear;
    QPushButton *btnl;
    QPushButton *btnr;
    QPushButton *btnadd;
    QPushButton *btnminus;
    QPushButton *btn;
    QPushButton *btnmul;
    QPushButton *btndivide;
    QMenuBar *menuBar;
    QToolBar *mainToolBar;
    QStatusBar *statusBar;

    void setupUi(QMainWindow *MyClassClass)
    {
        if (MyClassClass->objectName().isEmpty())
            MyClassClass->setObjectName(QString::fromUtf8("MyClassClass"));
        MyClassClass->resize(377, 385);
        centralWidget = new QWidget(MyClassClass);
        centralWidget->setObjectName(QString::fromUtf8("centralWidget"));
        verticalLayout = new QVBoxLayout(centralWidget);
        verticalLayout->setSpacing(6);
        verticalLayout->setContentsMargins(11, 11, 11, 11);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        label = new QLabel(centralWidget);
        label->setObjectName(QString::fromUtf8("label"));

        verticalLayout->addWidget(label);

        line = new QLineEdit(centralWidget);
        line->setObjectName(QString::fromUtf8("line"));

        verticalLayout->addWidget(line);

        gridLayout = new QGridLayout();
        gridLayout->setSpacing(6);
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        btn1 = new QPushButton(centralWidget);
        btn1->setObjectName(QString::fromUtf8("btn1"));

        gridLayout->addWidget(btn1, 0, 0, 1, 1);

        btn2 = new QPushButton(centralWidget);
        btn2->setObjectName(QString::fromUtf8("btn2"));

        gridLayout->addWidget(btn2, 0, 1, 1, 1);

        btn3 = new QPushButton(centralWidget);
        btn3->setObjectName(QString::fromUtf8("btn3"));

        gridLayout->addWidget(btn3, 0, 2, 1, 1);

        btn4 = new QPushButton(centralWidget);
        btn4->setObjectName(QString::fromUtf8("btn4"));

        gridLayout->addWidget(btn4, 1, 0, 1, 1);

        btn5 = new QPushButton(centralWidget);
        btn5->setObjectName(QString::fromUtf8("btn5"));

        gridLayout->addWidget(btn5, 1, 1, 1, 1);

        btn6 = new QPushButton(centralWidget);
        btn6->setObjectName(QString::fromUtf8("btn6"));

        gridLayout->addWidget(btn6, 1, 2, 1, 1);

        btn7 = new QPushButton(centralWidget);
        btn7->setObjectName(QString::fromUtf8("btn7"));

        gridLayout->addWidget(btn7, 2, 0, 1, 1);

        btn8 = new QPushButton(centralWidget);
        btn8->setObjectName(QString::fromUtf8("btn8"));

        gridLayout->addWidget(btn8, 2, 1, 1, 1);

        btn9 = new QPushButton(centralWidget);
        btn9->setObjectName(QString::fromUtf8("btn9"));

        gridLayout->addWidget(btn9, 2, 2, 1, 1);

        btn0 = new QPushButton(centralWidget);
        btn0->setObjectName(QString::fromUtf8("btn0"));

        gridLayout->addWidget(btn0, 3, 0, 1, 1);

        btnend = new QPushButton(centralWidget);
        btnend->setObjectName(QString::fromUtf8("btnend"));

        gridLayout->addWidget(btnend, 3, 1, 1, 1);

        btnclear = new QPushButton(centralWidget);
        btnclear->setObjectName(QString::fromUtf8("btnclear"));

        gridLayout->addWidget(btnclear, 3, 2, 2, 1);

        btnl = new QPushButton(centralWidget);
        btnl->setObjectName(QString::fromUtf8("btnl"));

        gridLayout->addWidget(btnl, 4, 0, 1, 1);

        btnr = new QPushButton(centralWidget);
        btnr->setObjectName(QString::fromUtf8("btnr"));

        gridLayout->addWidget(btnr, 4, 1, 1, 1);

        btnadd = new QPushButton(centralWidget);
        btnadd->setObjectName(QString::fromUtf8("btnadd"));

        gridLayout->addWidget(btnadd, 5, 0, 1, 1);

        btnminus = new QPushButton(centralWidget);
        btnminus->setObjectName(QString::fromUtf8("btnminus"));

        gridLayout->addWidget(btnminus, 5, 1, 1, 1);

        btn = new QPushButton(centralWidget);
        btn->setObjectName(QString::fromUtf8("btn"));

        gridLayout->addWidget(btn, 5, 2, 2, 1);

        btnmul = new QPushButton(centralWidget);
        btnmul->setObjectName(QString::fromUtf8("btnmul"));

        gridLayout->addWidget(btnmul, 6, 0, 1, 1);

        btndivide = new QPushButton(centralWidget);
        btndivide->setObjectName(QString::fromUtf8("btndivide"));

        gridLayout->addWidget(btndivide, 6, 1, 1, 1);


        verticalLayout->addLayout(gridLayout);

        MyClassClass->setCentralWidget(centralWidget);
        menuBar = new QMenuBar(MyClassClass);
        menuBar->setObjectName(QString::fromUtf8("menuBar"));
        menuBar->setGeometry(QRect(0, 0, 377, 26));
        MyClassClass->setMenuBar(menuBar);
        mainToolBar = new QToolBar(MyClassClass);
        mainToolBar->setObjectName(QString::fromUtf8("mainToolBar"));
        MyClassClass->addToolBar(Qt::TopToolBarArea, mainToolBar);
        statusBar = new QStatusBar(MyClassClass);
        statusBar->setObjectName(QString::fromUtf8("statusBar"));
        MyClassClass->setStatusBar(statusBar);

        retranslateUi(MyClassClass);

        QMetaObject::connectSlotsByName(MyClassClass);
    } // setupUi

    void retranslateUi(QMainWindow *MyClassClass)
    {
        MyClassClass->setWindowTitle(QApplication::translate("MyClassClass", "\350\256\241\347\256\227\345\231\250", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("MyClassClass", "\350\257\267\350\276\223\345\205\245\344\270\200\344\270\252\344\273\245#\347\273\223\345\260\276\347\232\204\347\256\227\345\274\217", 0, QApplication::UnicodeUTF8));
        btn1->setText(QApplication::translate("MyClassClass", "1", 0, QApplication::UnicodeUTF8));
        btn2->setText(QApplication::translate("MyClassClass", "2", 0, QApplication::UnicodeUTF8));
        btn3->setText(QApplication::translate("MyClassClass", "3", 0, QApplication::UnicodeUTF8));
        btn4->setText(QApplication::translate("MyClassClass", "4", 0, QApplication::UnicodeUTF8));
        btn5->setText(QApplication::translate("MyClassClass", "5", 0, QApplication::UnicodeUTF8));
        btn6->setText(QApplication::translate("MyClassClass", "6", 0, QApplication::UnicodeUTF8));
        btn7->setText(QApplication::translate("MyClassClass", "7", 0, QApplication::UnicodeUTF8));
        btn8->setText(QApplication::translate("MyClassClass", "8", 0, QApplication::UnicodeUTF8));
        btn9->setText(QApplication::translate("MyClassClass", "9", 0, QApplication::UnicodeUTF8));
        btn0->setText(QApplication::translate("MyClassClass", "0", 0, QApplication::UnicodeUTF8));
        btnend->setText(QApplication::translate("MyClassClass", "#", 0, QApplication::UnicodeUTF8));
        btnclear->setText(QApplication::translate("MyClassClass", "\345\210\240\351\231\244", 0, QApplication::UnicodeUTF8));
        btnl->setText(QApplication::translate("MyClassClass", "(", 0, QApplication::UnicodeUTF8));
        btnr->setText(QApplication::translate("MyClassClass", ")", 0, QApplication::UnicodeUTF8));
        btnadd->setText(QApplication::translate("MyClassClass", "+", 0, QApplication::UnicodeUTF8));
        btnminus->setText(QApplication::translate("MyClassClass", "-", 0, QApplication::UnicodeUTF8));
        btn->setText(QApplication::translate("MyClassClass", "\350\256\241\347\256\227", 0, QApplication::UnicodeUTF8));
        btnmul->setText(QApplication::translate("MyClassClass", "*", 0, QApplication::UnicodeUTF8));
        btndivide->setText(QApplication::translate("MyClassClass", "/", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class MyClassClass: public Ui_MyClassClass {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_MYCLASS_H

功能方面

界面部分

相关代码

main.cpp

#include "myclass.h"
#include <QtGui/QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MyClass w;
    w.show();
    return a.exec();
}

myclass.cpp

#include "myclass.h"
#include "QMessageBox"
using namespace std;

MyClass::MyClass(QWidget *parent, Qt::WFlags flags)
    : QMainWindow(parent, flags)
{
    ui.setupUi(this);
    connect(ui.btn,SIGNAL(clicked()),this,SLOT(Onbtn()));
    connect(ui.btn1,SIGNAL(clicked()),this,SLOT(Onbtn1()));
    connect(ui.btn2,SIGNAL(clicked()),this,SLOT(Onbtn2()));
    connect(ui.btn3,SIGNAL(clicked()),this,SLOT(Onbtn3()));
    connect(ui.btn4,SIGNAL(clicked()),this,SLOT(Onbtn4()));
    connect(ui.btn5,SIGNAL(clicked()),this,SLOT(Onbtn5()));
    connect(ui.btn6,SIGNAL(clicked()),this,SLOT(Onbtn6()));
    connect(ui.btn7,SIGNAL(clicked()),this,SLOT(Onbtn7()));
    connect(ui.btn8,SIGNAL(clicked()),this,SLOT(Onbtn8()));
    connect(ui.btn9,SIGNAL(clicked()),this,SLOT(Onbtn9()));
    connect(ui.btn0,SIGNAL(clicked()),this,SLOT(Onbtn0()));
    connect(ui.btnadd,SIGNAL(clicked()),this,SLOT(Onbtnadd()));
    connect(ui.btnminus,SIGNAL(clicked()),this,SLOT(Onbtnminus()));
    connect(ui.btnmul,SIGNAL(clicked()),this,SLOT(Onbtnmul()));
    connect(ui.btndivide,SIGNAL(clicked()),this,SLOT(Onbtndivide()));
    connect(ui.btnend,SIGNAL(clicked()),this,SLOT(Onbtnend()));
    connect(ui.btnl,SIGNAL(clicked()),this,SLOT(Onbtnl()));
    connect(ui.btnr,SIGNAL(clicked()),this,SLOT(Onbtnr()));
    connect(ui.btnclear,SIGNAL(clicked()),this,SLOT(Onbtnclear()));
}

MyClass::~MyClass()
{

}
template<class t>
class stack
{
private:
    int data[100];
    int count;
public:
    void Stack();
    int empty();
    int full();
    int get_top();
    void push(t x);
    void pop();
};

template<class t>
void stack<t>::Stack()
{
    count=0;
}
template<class t>
int stack<t>::empty()
{
    if(count==0)
        return 1;
    else
        return 0;
}
template<class t>
int stack<t>::full()
{
    if(count==100)
        return 1;
    else
        return 0;
}
template<class t>
int stack<t>::get_top()
{
    if(empty()==0)
        return data[count-1];
}
template<class t>
void stack<t>::push(t x)
{
    if(full()==0)
    {
        data[count]=x;
        count++;
    }
}
template<class t>
void stack<t>::pop()
{
    if(empty()==0)
        count--;
}

int numbers(string nu,int i)//用来判断是数字还是运算符 
{
    if(nu[i]>='0'&&nu[i]<='9')
        return 1;
    else
        return 0;
}
int priority(char py)//比较运算符的优先级 
{
    if(py=='+'||py=='-')
        return 1;
    else if(py=='*'||py=='/')
        return 2;
    else if(py=='#')
        return -1;
    else if(py=='('||py==')')
        return 0;
}
int calculate(string ch)//运算 
{
    stack<int> num;
    stack<char> sym;
    char character;
    int number,fn;//fn用于十位以上的数字
    int f=0;//用来区分符号和数字的转换的标记
    int i=0;//用来遍历表达式 
    num.Stack();
    sym.Stack();
    sym.push('#');
    while(sym.empty()==0)
    {
        if(numbers(ch,i)==1)//如果是数字 
        {
            if(f==0)
            {
                num.push(ch[i]-48);
                i++;
                f=1;
            }
            else
            {
                fn=num.get_top()*10+ch[i]-48;
                num.pop();
                num.push(fn);
                i++;
                f=1;
            }
            
        }
        else//不是数字 
        {
            f=0;
            character=sym.get_top();
            if(priority(ch[i])==priority(character)&&ch[i]==')')//括号的判断 
            {
                sym.pop();
                i++;
            }
            else if(ch[i]=='(')
            {
                sym.push(ch[i]);
                i++;
            }
            else if(priority(ch[i])==priority(character)&&ch[i]=='#')//#的判断 
            {
                sym.pop();
            }
            else if(priority(ch[i])>=priority(character))//比顶优先就入栈 
            {
                sym.push(ch[i]);
                i++;
            }
            else//比顶差就运算 
            {
                if(character=='-')
                {
                    number=num.get_top();
                    num.pop();
                    number=num.get_top()-number;
                    num.pop();
                    num.push(number);
                }
                else if(character=='+')
                {
                    number=num.get_top();
                    num.pop();
                    number=num.get_top()+number;
                    num.pop();
                    num.push(number);
                }
                else if(character=='*')
                {
                    number=num.get_top();
                    num.pop();
                    number=num.get_top()*number;
                    num.pop();
                    num.push(number);
                }
                else if(character=='/')
                {
                    number=num.get_top();
                    num.pop();
                    number=num.get_top()/number;
                    num.pop();
                    num.push(number);
                }
                sym.pop();
                if(priority(ch[i])>priority(sym.get_top()))//只有当前遍历到的运算符比顶大时才将其入栈,并向下遍历 
                {
                    sym.push(ch[i]);
                    i++;
                }
                else
                    continue;

            }
        }
    } 
    return num.get_top();//输出运算结果 
}
int MyClass::Onbtn1()
{  
    expression+="1";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtn2()
{
    expression+="2";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtn3()
{
    expression+="3";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtn4()
{
    expression+="4";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtn5()
{
    expression+="5";  
    ui.line->setText(expression);
    return 0;
}
int MyClass::Onbtn6()
{
    expression+="6";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtn7()
{
    expression+="7";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtn8()
{
    expression+="8";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtn9()
{
    expression+="9";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtn0()
{
    expression+="0";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtnadd()
{
    expression+="+";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtnminus()
{
    expression+="-";  
    ui.line->setText(expression); 
    return 0;
}
int MyClass::Onbtnmul()
{
    expression+="*";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtndivide()
{
    expression+="/";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtnend()
{
    expression+="#";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtnl()
{
    expression+="(";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtnr()
{
    expression+=")";  
    ui.line->setText(expression);  
    return 0;
}
int MyClass::Onbtnclear()
{
    ui.line->setText("");
    expression="";  
    return 0;
}
int MyClass::Onbtn()
{
    QString line=ui.line->text();
    string ch;
    int c;

    ch = string((const char *)line.toLocal8Bit());//将QString转化为string

    c=calculate(ch);//计算
    ch= to_string(static_cast<long long>(c));//将返回的int转化为string

    line= QString(QString::fromLocal8Bit(ch.c_str()));//将string转化为QString

    QMessageBox::information(this,"result",line);//显示结果
    return 0;
}

myclass.h

#ifndef MYCLASS_H
#define MYCLASS_H

#include <QtGui/QMainWindow>
#include "ui_myclass.h"

class MyClass : public QMainWindow
{
    Q_OBJECT

public:
    MyClass(QWidget *parent = 0, Qt::WFlags flags = 0);
    ~MyClass();
    private slots:
        int Onbtn();
        int Onbtn1();
        int Onbtn2();
        int Onbtn3();
        int Onbtn4();
        int Onbtn5();
        int Onbtn6();
        int Onbtn7();
        int Onbtn8();
        int Onbtn9();
        int Onbtn0();
        int Onbtnadd();
        int Onbtnminus();
        int Onbtnmul();
        int Onbtndivide();
        int Onbtnend();
        int Onbtnl();
        int Onbtnr();
        int Onbtnclear();
private:
    Ui::MyClassClass ui;
    QString expression;
};

#endif // MYCLASS_H

标签:界面,int,setText,QApplication,c++,MyClassClass,ui,QPushButton,计算器
来源: https://www.cnblogs.com/Qi-Lin/p/12221243.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有