QT学习 之 计算器的实现

前些天刚开始接触QT,对QT的开发环境有了些许了解。觉得用QT写一个软件还是很方便的。当然由于0基础遇到的问题也不少。

1.对于QT学习方法还在探究之中,目前想到的,认为比较有效的方法就是先看教学视频,然后试着编写一些自己感兴趣的小软件。通过软件去查漏补缺。(希望大佬们推荐一下更有效的学习方法)。

2.当我写完一个计算器程序以后,我想在我的根目录里面去运行 *.exe 文件,发现根本不能运行,他告诉我缺少某个.dll文件。然后我又按照视频里面的方法去修改了环境变量,还真的有效。然后我把程序拿到女朋友的电脑去运行,系统又提示我缺少某个 .dll 文件。然后我又去查了下资料,说什么QT是动态编译的,需要添加他所包含的一系列 *.dll文件。随后就去添加了各种 *.dll 文件。添加完了以后,还是不能运行,又去查,说有些需要包含的文件并不会显示出来。接着 我又发现了  windeployqt  。这东西是真的好用,他直接把你运行的程序所包含的 .dll文件直接全部复制到你的根目录下。这样就省去了自己复制的步骤。

3.虽然程序在他人的电脑上可以运行了,但是包含的东西太多,软件太大了。然后在好心网友的知道下,知道了 inno setup 这个软件,它能直接打包你需要运行的程序和他附属的各种文件。至此,我的简便计算器软件,就完全写好了。。。。。。。。。。。。。。。。



下面上传我的代码。


#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>
#include <QString>
#include <QMessageBox>  // 消息提示框

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
    
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();
    
private:
    Ui::MainWindow *ui;
//建立0-9的槽
private slots:
    void zeroslotclicked();
private slots:
    void oneslotclicked();
private slots:
    void twoslotclicked();
private slots:
    void threeslotclicked();
private slots:
    void fourslotclicked();
private slots:
    void fiveslotclicked();
private slots:
    void sixslotclicked();
private slots:
    void sevenslotclicked();
private slots:
    void eightslotclicked();
private slots:
    void nineslotclicked();
//建立加减乘除等于点的槽
private slots:
    void addslotclicked();
private slots:
    void subtractslotclicked();
private slots:
    void rideslotclicked();
private slots:
    void divideslotclicked();
private slots:
    void equalslotclicked();
private slots:
    void decimalslotclicked();
private slots:
    void cslotclicked();


};

#endif // MAINWINDOW_H



#include "mainwindow.h"
#include <QApplication>
#include <QString>
int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();
    
    return a.exec();
}




#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QString>

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)

{
    ui->setupUi(this);
    this->setMaximumSize(537,410);   //设置为固定的大小
    this->setMinimumSize(537,410);
    // 0-9 .
    QObject::connect(ui->zero,SIGNAL(clicked()),this,SLOT(zeroslotclicked()));
    QObject::connect(ui->one,SIGNAL(clicked()),this,SLOT(oneslotclicked()));
    QObject::connect(ui->two,SIGNAL(clicked()),this,SLOT(twoslotclicked()));
    QObject::connect(ui->three,SIGNAL(clicked()),this,SLOT(threeslotclicked()));
    QObject::connect(ui->four,SIGNAL(clicked()),this,SLOT(fourslotclicked()));
    QObject::connect(ui->five,SIGNAL(clicked()),this,SLOT(fiveslotclicked()));
    QObject::connect(ui->six,SIGNAL(clicked()),this,SLOT(sixslotclicked()));
    QObject::connect(ui->seven,SIGNAL(clicked()),this,SLOT(sevenslotclicked()));
    QObject::connect(ui->eight,SIGNAL(clicked()),this,SLOT(eightslotclicked()));
    QObject::connect(ui->nine,SIGNAL(clicked()),this,SLOT(nineslotclicked()));
    QObject::connect(ui->decimal,SIGNAL(clicked()),this,SLOT(decimalslotclicked()));
    // 加减乘除等
    QObject::connect(ui->add,SIGNAL(clicked()),this,SLOT(addslotclicked()));
    QObject::connect(ui->subtract,SIGNAL(clicked()),this,SLOT(subtractslotclicked()));
    QObject::connect(ui->ride,SIGNAL(clicked()),this,SLOT(rideslotclicked()));
    QObject::connect(ui->divide,SIGNAL(clicked()),this,SLOT(divideslotclicked()));
    QObject::connect(ui->equal,SIGNAL(clicked()),this,SLOT(equalslotclicked()));

    //复位
    QObject::connect(ui->c,SIGNAL(clicked()),this,SLOT(cslotclicked()));


}

MainWindow::~MainWindow()
{
    delete ui;
}
//获取0-9 Button的值
double flag,counter=1.000000,result,firstnum,secondnum,thirdnum,fourthnum;
char midresult;
void MainWindow::zeroslotclicked()
{
    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+0.000000/counter;
    }
    else
    {
        result=result*10+0;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::oneslotclicked()
{

    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+1.000000/counter;
    }
    else
    {
        result=result*10+1;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::twoslotclicked()
{

    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+2.000000/counter;
    }
    else
    {
        result=result*10+2;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::threeslotclicked()
{

    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+3.000000/counter;
    }
    else
    {
        result=result*10+3;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::fourslotclicked()
{
    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+4.000000/counter;
    }
    else
    {
        result=result*10+4;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::fiveslotclicked()
{
    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+5.000000/counter;
    }
    else
    {
        result=result*10+5;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::sixslotclicked()
{

    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+6.000000/counter;
    }
    else
    {
        result=result*10+6;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::sevenslotclicked()
{

    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+7.000000/counter;
    }
    else
    {
        result=result*10+7;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::eightslotclicked()
{
    if(flag==1)
    {
        counter=counter*10.0000;
        result=result+8.000000/counter;
    }
    else
    {
        result=result*10+8;
    }
    ui->ResultEdit->setText(QString::number(result));
}
void MainWindow::nineslotclicked()
{
    if(flag==1)
    {
        counter=counter*10.000;
        result=result+9.00000/counter;
    }
    else
    {
        result=result*10+9;
    }
    ui->ResultEdit->setText(QString::number(result));
}



// 显示加减乘除等于


void MainWindow::decimalslotclicked()
{
    flag=1;
    ui->ResultEdit->setText(QString::number(result)+".");
}



void MainWindow::addslotclicked()
{
    flag=0;
    firstnum=result;
    result=0;
    counter=1.000000;
    midresult='+';
    ui->ResultEdit->setText("+");
}

void MainWindow::subtractslotclicked()
{
    flag=0;
    firstnum=result;
    result=0;
    counter=1.0000000;
    midresult='-';
    ui->ResultEdit->setText("-");
}
void MainWindow::rideslotclicked()
{
    flag=0;
    firstnum=result;
    result=0;
    counter=1.000000;
    midresult='*';
    ui->ResultEdit->setText("*");
}

void MainWindow::divideslotclicked()
{
    flag=0;
    firstnum=result;
    result=0;
    counter=1.000000;
    midresult='/';
    ui->ResultEdit->setText("/");
}




void MainWindow::equalslotclicked()
{
    flag=0;
    secondnum=result;
//判断运算法则,然后进行相应的运算;
    if(midresult=='+')
    {
        result=firstnum+secondnum;
    }
    if(midresult=='-')
    {
        result=firstnum-secondnum;
    }
    if(midresult=='*')
    {
        result=firstnum*secondnum;
    }
    if(midresult=='/')
    {
        if(secondnum==0)
        {
            QMessageBox::warning(this,"Error Message","Error");
            return;
        }
        result=firstnum/secondnum;
    }

    ui->ResultEdit->setText(QString::number(result));
    result=0;
    counter=1.000000;
}


void MainWindow::cslotclicked()
{
    flag=0;
    firstnum=0;
    secondnum=0;
    result=0;
    counter=1.000000;
    midresult='C';
    ui->ResultEdit->setText("0");
}












评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lucas_zgp

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值