一、目标
设计一个程序,要求能够计算两个数字的和,两个数字由文本框输入,当点击等于的时候,再另一个标签中输出数字的和
二、分析
需要两个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
- }
版本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!");
- }
- }