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