艰难的Qt学习之路——简易加法器

艰难的Qt学习之路——简易加法器

一、目标

设计一个程序,要求能够计算两个数字的和,两个数字由文本框输入,当点击等于的时候,再另一个标签中输出数字的和

二、分析

需要两个QLineEdit,一个QPushButton,两个QLabel,还有一个用于简单布局的QHBoxLayout

需要把QString转为int,所以使用toInt函数,还需要把int转为QString,需要使用number函数,缺省参数表示进制为10

三、源代码

//头文件 widhet.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void calc();    //槽函数,用于计算并显示

private:
    QLabel *label_ans, *label_add;
    QLineEdit *num1, *num2;
    QPushButton *button_calc;
    QHBoxLayout *layout;
};

#endif // WIDGET_H


//widget.cpp1

#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    label_ans = new QLabel("0", this);
    label_add = new QLabel("+", this);

    num1 = new QLineEdit(this);
    num2 = new QLineEdit(this);
    button_calc = new QPushButton("=", this);

    layout = new QHBoxLayout;
    layout->addWidget(num1);
    layout->addWidget(label_add);
    layout->addWidget(num2);
    layout->addWidget(button_calc);
    layout->addWidget(label_ans);
    this->setLayout(layout);

    QObject::connect(button_calc, SIGNAL(clicked(bool)), this, SLOT(calc()));    //信号槽
}

Widget::~Widget()
{

}

void Widget::calc()
{
   label_ans->setText(QString::number(num1->text().toInt() + num2->text().toInt()));    //获取文本消息以后,变成int,相加以后变成QString
}
//main.cpp是默认的东西,这里就不贴出来了

版本1.0运行截屏


版本二

可以选择不同的方式,包括加减乘除来进行运算,更改的主要地方是,原来的label_add标签,被替换成为一个QRadioButton了,是一个组,包含4个选项。

根据QLineEdit的内容,进行运算,主要是判断除0

//头文件

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include <QLabel>
#include <QLineEdit>
#include <QPushButton>
#include <QHBoxLayout>
#include <QRadioButton>
#include <QVBoxLayout>

class Widget : public QWidget
{
    Q_OBJECT

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

private slots:
    void calc();

private:
    QLabel *label_ans;
    QLineEdit *num1, *num2;
    QPushButton *button_calc;
    QHBoxLayout *layout;
    QRadioButton *select[4];    //选项组,因为全局只有一个组,所以不用设为一个RadioGroup
    QVBoxLayout *select_layout;    //专门给上面的选项布局用的 垂直布局方式
};

#endif // WIDGET_H

//主方法

#include "widget.h"

Widget::Widget(QWidget *parent) :
    QWidget(parent)
{
    label_ans = new QLabel("0", this);
    select[0] = new QRadioButton("+", this);
    select[1] = new QRadioButton("-", this);
    select[2] = new QRadioButton("*", this);
    select[3] = new QRadioButton("/", this);
    num1 = new QLineEdit(this);
    num2 = new QLineEdit(this);
    button_calc = new QPushButton("=", this);

    layout = new QHBoxLayout;
    select_layout = new QVBoxLayout;
    select_layout->addWidget(select[0]);
    select_layout->addWidget(select[1]);
    select_layout->addWidget(select[2]);
    select_layout->addWidget(select[3]);

    layout->addWidget(num1);
    layout->addLayout(select_layout);    //嵌套布局
    layout->addWidget(num2);
    layout->addWidget(button_calc);
    layout->addWidget(label_ans);
    this->setLayout(layout);

    QObject::connect(button_calc, SIGNAL(clicked(bool)), this, SLOT(calc()));
}

Widget::~Widget()
{

}

void Widget::calc()
{
   int a = num1->text().toInt();
   int b = num2->text().toInt();    //因为会多次用到这些数据,所以提前取出来

   if (select[0]->isChecked())
   {
        label_ans->setText(QString::number(a + b));
   }
   else if (select[1]->isChecked())
   {
        label_ans->setText(QString::number(a - b));
   }
   else if (select[2]->isChecked())
   {
        label_ans->setText(QString::number(a * b));
   }
   else if(select[3]->isChecked())
   {
        if (b == 0)    //判断是否为0
            label_ans->setText("Zero Error");
        else
            label_ans->setText(QString::number(a / b));
   }
   else
   {
       label_ans->setText("Please Choose A Calc Method!");
   }
}
版本1.1运行效果图

艰难的Qt学习之路——简易加法器_第1张图片

你可能感兴趣的:(C++,qt)