Qt4 计算器

main.cpp

#include <QApplication>
#include "cal.h"
#include "ui_CAL_UI.h"
int main( int argc, char * argv[] )
{
	QApplication app( argc, argv );
    app.setWindowIcon(QIcon("newcal.ico"));
	CalDialog *cal = new CalDialog;
	cal->show();
	return app.exec();
}

cal.cpp

#include <QtGui>
#include "cal.h"
CalDialog::CalDialog(  ) : QMainWindow( )
{
	setupUi( this );
	showedit = "0.";
	op = -1;
	dot = false;
	first = true;
	lastop = -1;
	on_num1 = false;
	on_num2 = false;
	press = false;
	
	connect( zero, SIGNAL(clicked() ), this, SLOT(Print0()) );
	connect( one, SIGNAL(clicked() ), this, SLOT(Print1()) );
	connect( two, SIGNAL(clicked() ), this, SLOT(Print2()) );
	connect( three, SIGNAL(clicked() ), this, SLOT(Print3()) );
	connect( four, SIGNAL(clicked() ), this, SLOT(Print4()) );
	connect( five, SIGNAL(clicked() ), this, SLOT(Print5()) );
	connect( six, SIGNAL(clicked() ), this, SLOT(Print6()) );
	connect( seven, SIGNAL(clicked() ), this, SLOT(Print7()) );
	connect( eight, SIGNAL(clicked() ), this, SLOT(Print8()) );
	connect( nine, SIGNAL(clicked() ), this, SLOT(Print9()) );


	connect( plus, SIGNAL(clicked() ), this, SLOT(Plus()) );
	connect( sub, SIGNAL(clicked() ), this, SLOT(Sub()) );
	connect( mul, SIGNAL(clicked() ), this, SLOT(Mul()) );
	connect( div, SIGNAL(clicked() ), this, SLOT(Div()) );

    connect( sqrt, SIGNAL(clicked() ), this, SLOT(Sqrt() ) );
    connect( mod, SIGNAL(clicked() ), this, SLOT(Mod() ));

	connect( equal, SIGNAL(clicked() ), this, SLOT(Equal()) );

	connect( ce, SIGNAL(clicked() ), this, SLOT(Ce()) );

	connect( backspace, SIGNAL(clicked() ), this, SLOT(Backspace()) );

	connect( dota, SIGNAL(clicked() ), this, SLOT(Dot()) );
    connect( negtive, SIGNAL(clicked() ), this, SLOT(Neg() ) );

}

void CalDialog::Neg()
{
    QString temp;
    if(  temp != "0." && temp != "error" && temp[0] != '-' )
    {
        temp = "-" + temp;
        edit->setText( temp );
    }
}
void CalDialog::trans( int num )
{
		if( showedit == "0." )
		{
			if( dot == false )
				showedit = QString::number(num)+".";
			else
				showedit.append( QString::number(num) );
		}
		else
		{
			if( showedit.length() < 16 )
			{
				if( dot == false )
					showedit.insert( showedit.length()-1, QString::number(num) );
				else
					showedit.insert( showedit.length(), QString::number(num) );
			}
		}
		edit->setText( showedit );

}
void CalDialog::Sqrt()
{
    int num;
    QString temp;
    temp = edit->text();
    num = temp.toDouble();
    qSqrt( num );
    edit->setText( QString::number(num) );
}
void CalDialog::Mod()
{
    op = '%';
    test();
    dot = false;
    showedit = "0.";
}
void CalDialog::Plus()
{
    op = '+';
    test();
    dot = false;
    showedit = "0.";
}
void CalDialog::Sub()
{
    op = '-';
    test();
    dot = false;
    showedit = "0.";
}
void CalDialog::Mul()
{
    op = '*';
    test();
    dot = false;
    showedit = "0.";
}
void CalDialog::Div()
{
    op = '/';
    test();
    dot = false;
    showedit = "0.";
}
void CalDialog::Equal( )
{
    QString temp;
    if( first  && lastop == -1 ) return;            //如果只输入了一个数字直接按等号
    if( press )                                                        //如果第二次输入是一个数 如 1+2  而不是 输入 1 +  +
    {                                                                          //press  设在槽函数中用来测试按键是否是数字
        temp = edit->text();
        num2 = temp.toDouble();
        num4 = (int)num2;
		on_num2 = true;
	}
	if( op != -1 )
	{
		if( lastop == '+' && on_num1 && on_num2 )
		{
			num1 += num2;
			if( QString::number(num1).contains(".") )
				edit->setText( QString::number(num1)  );
			else
				edit->setText( QString::number(num1) + '.' );
			on_num2 = false;
		}
		if( lastop == '-' && on_num1 && on_num2 )
		{
			num1 -= num2;
			if( QString::number(num1).contains(".") )
				edit->setText( QString::number(num1)  );
			else
				edit->setText( QString::number(num1) + '.' );
			on_num2 = false;
		}
		if( lastop == '*' && on_num1 && on_num2 )
		{
			num1 *= num2;
			if( QString::number(num1).contains(".") )
				edit->setText( QString::number(num1)  );
			else
				edit->setText( QString::number(num1) + '.' );
			on_num2 = false;
		}
		if( lastop == '/' && on_num1 && on_num2  )
		{
			if( num2 == 0 )
				edit->setText( "error" );
			else
			{
                num1 /= num2;
				if( QString::number(num1).contains(".") )
					edit->setText( QString::number(num1)  );
				else
					edit->setText( QString::number(num1) + '.' );
				on_num2 = false;
			}
        }
       if( lastop == '%' && on_num1 && on_num2   )
       {
           if( num2 == 0 ||  temp.at( temp.length()-1 ) != '.'  )
                    edit->setText( "error" );
                else
                {
                    num3 %= num4;
                    num1 = num3;
                    if( QString::number(num1).contains(".") )
                        edit->setText( QString::number(num1)  );
                    else
                        edit->setText( QString::number(num1) + '.' );
                    on_num2 = false;
                }
		}
        first = true;
		dot = false;
		showedit = "0.";
	}
}
void CalDialog::test()
{
    if( !first )                    //如果不是第一次使用符号     如:  1+ 1 +    此时应该调用等号先算出2  再进行加
        Equal();
    else                                //如果是第一次用符号   1+    此时把1  存进第一个数
	{
		if( press  )
		{
            lastop = op;
			first = false;
            showedit= edit->text();
            num1 = showedit.toDouble();
            num3 = (int)num1;
			on_num1 = true;
		}
     }
    lastop = op;
	press = false;
}
void CalDialog::Backspace()                     //删除数字
{
	showedit = edit->text();
	if( showedit != "0." )
	{
       if( showedit.length() == 2 || (showedit.length()==3 && showedit.at(0) == '-' )  )
			Ce();
		else
		{
			if( showedit.at(showedit.length()-1) != '.' )
				showedit.remove( showedit.length()-1, 1);
			else
				showedit.remove( showedit.length()-2, 1);
		}
	}
	edit->setText( showedit );
}

void CalDialog::Ce()                            //清零
{
	showedit = "0.";
	edit->setText( showedit );
	num1 = 0;
	num2 = 0;
	first = true;
	dot = false;
}

void CalDialog::Print0()
{
	press = true;
	trans( 0 );
}

void CalDialog::Print1()
{
	press = true;
	trans( 1 );
}

void CalDialog::Print2()
{
	press = true;
	trans( 2 );
}

void CalDialog::Print3()
{
	press = true;
	trans( 3 );
}

void CalDialog::Print4()
{
	press = true;
	trans( 4 );
}

void CalDialog::Print5()
{
	press = true;
	trans( 5 );
}

void CalDialog::Print6()
{
	press = true;
	trans( 6 );
}

void CalDialog::Print7()
{
	press = true;
	trans( 7 );
}

void CalDialog::Print8()
{
	press = true;
	trans( 8 );
}

void CalDialog::Print9()
{
	press = true;
	trans( 9 );
}

void CalDialog::Dot()
{
	if( dot == false )
        dot = true;
}

cal.h

#ifndef CAL_H
#define CAL_H
#include <QWidget>
#include <QDialog>
#include <QString>
#include "ui_CAL_UI.h"
#include <QStack>
class CalDialog : public QMainWindow, public Ui::CAL_UI
{
	Q_OBJECT
	public:
		CalDialog();
		QString showedit;
		int op;
		int lastop;
		bool dot;
		bool first;
		bool press;
		bool on_num1;
		bool on_num2;
		double num1;
		double num2;
        int num3;
        int num4;
		void trans( int num );
		void test();
	private slots:
		void Print0();
		void Print1();
		void Print2();
		void Print3();
		void Print4();
		void Print5();
		void Print6();
		void Print7();
		void Print8();
		void Print9();
		void Plus();
		void Sub();
		void Mul();
		void Div();
		void Ce();
		void Equal();
		void Backspace();
		void Dot();
        void Neg();
        void Mod();
        void Sqrt();
};
#endif

ui 文件


/********************************************************************************
** Form generated from reading UI file 'CAL_UI.ui'
**
** Created: Tue Mar 19 14:29:57 2013
**      by: Qt User Interface Compiler version 4.8.1
**
** WARNING! All changes made in this file will be lost when recompiling UI file!
********************************************************************************/

#ifndef UI_CAL_UI_H
#define UI_CAL_UI_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/QPushButton>
#include <QtGui/QStatusBar>
#include <QtGui/QVBoxLayout>
#include <QtGui/QWidget>

QT_BEGIN_NAMESPACE

class Ui_CAL_UI
{
public:
    QWidget *centralwidget;
    QWidget *layoutWidget;
    QVBoxLayout *verticalLayout;
    QGridLayout *gridLayout_4;
    QLineEdit *edit;
    QPushButton *backspace;
    QGridLayout *gridLayout_3;
    QGridLayout *gridLayout_2;
    QPushButton *one;
    QPushButton *two;
    QPushButton *three;
    QPushButton *four;
    QPushButton *five;
    QPushButton *six;
    QPushButton *seven;
    QPushButton *eight;
    QPushButton *nine;
    QGridLayout *gridLayout;
    QPushButton *plus;
    QPushButton *sub;
    QPushButton *dota;
    QPushButton *mul;
    QPushButton *div;
    QPushButton *negtive;
    QPushButton *mod;
    QPushButton *ce;
    QPushButton *sqrt;
    QPushButton *zero;
    QPushButton *equal;
    QLabel *label;
    QStatusBar *statusbar;

    void setupUi(QMainWindow *CAL_UI)
    {
        if (CAL_UI->objectName().isEmpty())
            CAL_UI->setObjectName(QString::fromUtf8("CAL_UI"));
        CAL_UI->resize(381, 267);
        CAL_UI->setMinimumSize(QSize(41, 41));
        CAL_UI->setMaximumSize(QSize(16777215, 16777215));
        centralwidget = new QWidget(CAL_UI);
        centralwidget->setObjectName(QString::fromUtf8("centralwidget"));
        layoutWidget = new QWidget(centralwidget);
        layoutWidget->setObjectName(QString::fromUtf8("layoutWidget"));
        layoutWidget->setGeometry(QRect(20, 10, 333, 232));
        verticalLayout = new QVBoxLayout(layoutWidget);
        verticalLayout->setObjectName(QString::fromUtf8("verticalLayout"));
        verticalLayout->setContentsMargins(0, 0, 0, 0);
        gridLayout_4 = new QGridLayout();
        gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
        edit = new QLineEdit(layoutWidget);
        edit->setObjectName(QString::fromUtf8("edit"));
        edit->setMaxLength(26);
        edit->setAlignment(Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter);
        edit->setReadOnly(true);

        gridLayout_4->addWidget(edit, 0, 0, 1, 2);

        backspace = new QPushButton(layoutWidget);
        backspace->setObjectName(QString::fromUtf8("backspace"));

        gridLayout_4->addWidget(backspace, 0, 2, 1, 1);

        gridLayout_3 = new QGridLayout();
        gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
        gridLayout_2 = new QGridLayout();
        gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
        one = new QPushButton(layoutWidget);
        one->setObjectName(QString::fromUtf8("one"));
        one->setMinimumSize(QSize(0, 0));
        one->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(one, 0, 0, 1, 1);

        two = new QPushButton(layoutWidget);
        two->setObjectName(QString::fromUtf8("two"));
        two->setMinimumSize(QSize(41, 41));
        two->setMaximumSize(QSize(41, 41));
        two->setBaseSize(QSize(0, 0));
        two->setIconSize(QSize(50, 50));

        gridLayout_2->addWidget(two, 0, 1, 1, 1);

        three = new QPushButton(layoutWidget);
        three->setObjectName(QString::fromUtf8("three"));
        three->setMinimumSize(QSize(41, 41));
        three->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(three, 0, 2, 1, 1);

        four = new QPushButton(layoutWidget);
        four->setObjectName(QString::fromUtf8("four"));
        four->setMinimumSize(QSize(41, 41));
        four->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(four, 1, 0, 1, 1);

        five = new QPushButton(layoutWidget);
        five->setObjectName(QString::fromUtf8("five"));
        five->setMinimumSize(QSize(41, 41));
        five->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(five, 1, 1, 1, 1);

        six = new QPushButton(layoutWidget);
        six->setObjectName(QString::fromUtf8("six"));
        six->setMinimumSize(QSize(0, 0));
        six->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(six, 1, 2, 1, 1);

        seven = new QPushButton(layoutWidget);
        seven->setObjectName(QString::fromUtf8("seven"));
        seven->setMinimumSize(QSize(41, 41));
        seven->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(seven, 2, 0, 1, 1);

        eight = new QPushButton(layoutWidget);
        eight->setObjectName(QString::fromUtf8("eight"));
        eight->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(eight, 2, 1, 1, 1);

        nine = new QPushButton(layoutWidget);
        nine->setObjectName(QString::fromUtf8("nine"));
        nine->setMinimumSize(QSize(41, 41));
        nine->setMaximumSize(QSize(41, 41));

        gridLayout_2->addWidget(nine, 2, 2, 1, 1);


        gridLayout_3->addLayout(gridLayout_2, 0, 0, 1, 1);

        gridLayout = new QGridLayout();
        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
        plus = new QPushButton(layoutWidget);
        plus->setObjectName(QString::fromUtf8("plus"));
        plus->setMinimumSize(QSize(0, 0));
        plus->setMaximumSize(QSize(41, 41));

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

        sub = new QPushButton(layoutWidget);
        sub->setObjectName(QString::fromUtf8("sub"));
        sub->setMinimumSize(QSize(0, 0));
        sub->setMaximumSize(QSize(41, 41));

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

        dota = new QPushButton(layoutWidget);
        dota->setObjectName(QString::fromUtf8("dota"));
        dota->setMinimumSize(QSize(0, 0));
        dota->setMaximumSize(QSize(41, 41));

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

        mul = new QPushButton(layoutWidget);
        mul->setObjectName(QString::fromUtf8("mul"));
        mul->setMinimumSize(QSize(0, 0));
        mul->setMaximumSize(QSize(41, 41));

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

        div = new QPushButton(layoutWidget);
        div->setObjectName(QString::fromUtf8("div"));
        div->setMinimumSize(QSize(0, 0));
        div->setMaximumSize(QSize(41, 41));

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

        negtive = new QPushButton(layoutWidget);
        negtive->setObjectName(QString::fromUtf8("negtive"));
        negtive->setMinimumSize(QSize(0, 0));
        negtive->setMaximumSize(QSize(41, 41));

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

        mod = new QPushButton(layoutWidget);
        mod->setObjectName(QString::fromUtf8("mod"));
        mod->setMinimumSize(QSize(0, 0));
        mod->setMaximumSize(QSize(41, 41));

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

        ce = new QPushButton(layoutWidget);
        ce->setObjectName(QString::fromUtf8("ce"));
        ce->setMinimumSize(QSize(0, 0));
        ce->setMaximumSize(QSize(41, 41));

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

        sqrt = new QPushButton(layoutWidget);
        sqrt->setObjectName(QString::fromUtf8("sqrt"));
        sqrt->setMinimumSize(QSize(0, 0));
        sqrt->setMaximumSize(QSize(41, 41));

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


        gridLayout_3->addLayout(gridLayout, 0, 1, 1, 1);


        gridLayout_4->addLayout(gridLayout_3, 1, 0, 1, 3);

        zero = new QPushButton(layoutWidget);
        zero->setObjectName(QString::fromUtf8("zero"));
        zero->setMaximumSize(QSize(16777215, 16777215));

        gridLayout_4->addWidget(zero, 2, 0, 1, 1);

        equal = new QPushButton(layoutWidget);
        equal->setObjectName(QString::fromUtf8("equal"));

        gridLayout_4->addWidget(equal, 2, 1, 1, 2);


        verticalLayout->addLayout(gridLayout_4);

        label = new QLabel(layoutWidget);
        label->setObjectName(QString::fromUtf8("label"));

        verticalLayout->addWidget(label);

        CAL_UI->setCentralWidget(centralwidget);
        statusbar = new QStatusBar(CAL_UI);
        statusbar->setObjectName(QString::fromUtf8("statusbar"));
        CAL_UI->setStatusBar(statusbar);

        retranslateUi(CAL_UI);

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

    void retranslateUi(QMainWindow *CAL_UI)
    {
        CAL_UI->setWindowTitle(QApplication::translate("CAL_UI", "Calc", 0, QApplication::UnicodeUTF8));
        edit->setText(QApplication::translate("CAL_UI", "0.", 0, QApplication::UnicodeUTF8));
        backspace->setText(QApplication::translate("CAL_UI", "backspace", 0, QApplication::UnicodeUTF8));
        one->setText(QApplication::translate("CAL_UI", "1", 0, QApplication::UnicodeUTF8));
        two->setText(QApplication::translate("CAL_UI", "2", 0, QApplication::UnicodeUTF8));
        three->setText(QApplication::translate("CAL_UI", "3", 0, QApplication::UnicodeUTF8));
        four->setText(QApplication::translate("CAL_UI", "4", 0, QApplication::UnicodeUTF8));
        five->setText(QApplication::translate("CAL_UI", "5", 0, QApplication::UnicodeUTF8));
        six->setText(QApplication::translate("CAL_UI", "6", 0, QApplication::UnicodeUTF8));
        seven->setText(QApplication::translate("CAL_UI", "7", 0, QApplication::UnicodeUTF8));
        eight->setText(QApplication::translate("CAL_UI", "8", 0, QApplication::UnicodeUTF8));
        nine->setText(QApplication::translate("CAL_UI", "9", 0, QApplication::UnicodeUTF8));
        plus->setText(QApplication::translate("CAL_UI", "+", 0, QApplication::UnicodeUTF8));
        sub->setText(QApplication::translate("CAL_UI", "\357\274\215", 0, QApplication::UnicodeUTF8));
        dota->setText(QApplication::translate("CAL_UI", ".", 0, QApplication::UnicodeUTF8));
        mul->setText(QApplication::translate("CAL_UI", "\303\227", 0, QApplication::UnicodeUTF8));
        div->setText(QApplication::translate("CAL_UI", "\303\267", 0, QApplication::UnicodeUTF8));
        negtive->setText(QApplication::translate("CAL_UI", "\302\261", 0, QApplication::UnicodeUTF8));
        mod->setText(QApplication::translate("CAL_UI", "%", 0, QApplication::UnicodeUTF8));
        ce->setText(QApplication::translate("CAL_UI", "C", 0, QApplication::UnicodeUTF8));
        sqrt->setText(QApplication::translate("CAL_UI", "\342\210\232", 0, QApplication::UnicodeUTF8));
        zero->setText(QApplication::translate("CAL_UI", "0", 0, QApplication::UnicodeUTF8));
        equal->setText(QApplication::translate("CAL_UI", "=", 0, QApplication::UnicodeUTF8));
        label->setText(QApplication::translate("CAL_UI", "This software is written by SamBrown Copyleft(C) SAM", 0, QApplication::UnicodeUTF8));
    } // retranslateUi

};

namespace Ui {
    class CAL_UI: public Ui_CAL_UI {};
} // namespace Ui

QT_END_NAMESPACE

#endif // UI_CAL_UI_H


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值