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 PATH的选择(如图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_H
Calculator.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(){
S+="2";
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;
}else{
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;
}
}else{
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='*';
mark=2;
}
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)帮助程序开发。