linux 下Qt初级教程(一)实现简易的计算器

17 篇文章 4 订阅
7 篇文章 0 订阅

Qt初级教程(一)实现简易的计算器

本文原创作者:冯一川(ifeng12358@163.com),如有转载,请注明原作者及出处。

本文软件环境linux(Ubuntu)+Qt 5.6.0。

源代码github地址:Linux下的简易计算器(Qt)

本文使用的技术点有:

1、信号和槽的使用,包括(emit)的使用;

2、字符串的处理,QString函数;

3、QLabel的边框设置。

创建一个QMainWindow项目。

先看界面布局

头文件mianwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

//#define QT_NO_OPENGL
#include <QMainWindow>

#include <QString>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT

public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
    void on_pushButton_clicked();


    void displayInput(QString str);


    void on_pushButton_2_clicked();

    void on_pushButton_3_clicked();

    void on_pushButton_4_clicked();

    void on_pushButton_5_clicked();

    void on_pushButton_6_clicked();

    void on_pushButton_7_clicked();

    void on_pushButton_8_clicked();

    void on_pushButton_9_clicked();

    void on_pushButton_10_clicked();

    void on_pushButton_12_clicked();

    void on_pushButton_13_clicked();

    void on_pushButton_14_clicked();

    void on_pushButton_15_clicked();

    void on_pushButton_11_clicked();

    void on_pushButton_16_clicked();

signals:
    void input(QString str);

private:
    Ui::MainWindow *ui;

    bool _Flag;

};

#endif // MAINWINDOW_H


mainwindow.cpp文件

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    ui->my_label->setStyleSheet("border:0.5px solid gray;");
    ui->my_label->setText("");
    _Flag = false;

    connect(this,SIGNAL(input(QString)),this,SLOT(displayInput(QString)));
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::displayInput(QString str)
{
    ui->my_label->setText(ui->my_label->text() + str);
}

void MainWindow::on_pushButton_clicked() //num 1
{
    emit input(ui->pushButton->text());
}

void MainWindow::on_pushButton_2_clicked() //num 2
{
    emit input(ui->pushButton_2->text());
}

void MainWindow::on_pushButton_3_clicked() //num 3
{
    emit input(ui->pushButton_3->text());
}

void MainWindow::on_pushButton_4_clicked() //num 4
{
    emit input(ui->pushButton_4->text());
}

void MainWindow::on_pushButton_5_clicked() //num 5
{
    emit input(ui->pushButton_5->text());
}

void MainWindow::on_pushButton_6_clicked() //num 6
{
    emit input(ui->pushButton_6->text());
}

void MainWindow::on_pushButton_7_clicked() //num 7
{
    emit input(ui->pushButton_7->text());
}

void MainWindow::on_pushButton_8_clicked() //num 8
{
    emit input(ui->pushButton_8->text());
}

void MainWindow::on_pushButton_9_clicked() //num 9
{
    emit input(ui->pushButton_9->text());
}

void MainWindow::on_pushButton_10_clicked() //num 0
{
    emit input(ui->pushButton_10->text());
}

void MainWindow::on_pushButton_12_clicked() //num +
{
    if(_Flag == false)
    {
        emit input(ui->pushButton_12->text());
        _Flag = true;
    }else{
        on_pushButton_11_clicked();
        ui->my_label->setText(ui->my_label->text()+"+");
    }
}

void MainWindow::on_pushButton_13_clicked() //num -
{
    if(_Flag == false)
    {
    emit input(ui->pushButton_13->text());
    _Flag = true;
    }else{
        on_pushButton_11_clicked();
        ui->my_label->setText(ui->my_label->text()+"-");
    }
}

void MainWindow::on_pushButton_14_clicked() //num *
{
    if(_Flag == false)
    {
    emit input(ui->pushButton_14->text());
    _Flag = true;
    }else{
        on_pushButton_11_clicked();
        ui->my_label->setText(ui->my_label->text()+"*");
    }

}

void MainWindow::on_pushButton_15_clicked() //num /
{
    if(_Flag == false)
    {
    emit input(ui->pushButton_15->text());
    _Flag = true;
    }else{
        on_pushButton_11_clicked();
        ui->my_label->setText(ui->my_label->text()+"/");
    }
}

void MainWindow::on_pushButton_11_clicked() //num =
{
    QString str1 = ui->my_label->text();

    if(str1.contains('+',Qt::CaseSensitive))
    {
        int iPos = str1.indexOf('+',Qt::CaseSensitive);
        QString nValue = "";
        int iValue = (str1.left(iPos)).toInt()+(str1.right(iPos)).toInt();
        nValue = QString("%1").arg(iValue);
        ui->my_label->setText(nValue);
        _Flag = false;
    }else if(str1.contains('-',Qt::CaseSensitive))
    {
        int iPos = str1.indexOf('-',Qt::CaseSensitive);
        QString nValue = "";
        int iValue = (str1.left(iPos)).toInt()-(str1.right(iPos)).toInt();
        nValue = QString("%1").arg(iValue);
        ui->my_label->setText(nValue);
        _Flag = false;
    }else if(str1.contains('*',Qt::CaseSensitive))
    {
        int iPos = str1.indexOf('*',Qt::CaseSensitive);
        QString nValue = "";
        int iValue = (str1.left(iPos)).toInt()*(str1.right(iPos)).toInt();
        nValue = QString("%1").arg(iValue);
        ui->my_label->setText(nValue);
        _Flag = false;
    }else if(str1.contains('/',Qt::CaseSensitive))
    {

        int iPos = str1.indexOf('/',Qt::CaseSensitive);
        if((str1.right(iPos))!="0")
        {
            QString nValue = "";
            double iValue = (str1.left(iPos)).toDouble()/(str1.right(iPos)).toDouble();
            nValue = QString("%1").arg(iValue);
            ui->my_label->setText(nValue);
        }else{
            ui->my_label->setText("0");
        }
        _Flag = false;
    }
}

void MainWindow::on_pushButton_16_clicked()
{
    _Flag = false;
    ui->my_label->setText("");
}


main.cpp文件

#include "mainwindow.h"
#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    MainWindow w;
    w.show();

    return a.exec();
}


编辑完之后,运行就可以了。

有什么不理解的,大家可以给我发邮件(ifeng12358@163.com)。

源代码地址:Github上的代码地址

  • 4
    点赞
  • 51
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

冯一川

谢谢老板对我的支持!

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

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

打赏作者

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

抵扣说明:

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

余额充值