Qt—简易加法器 一、目标

一、目标

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

二、分析

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

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

三、源代码

//头文件 widhet.h

[cpp]  view plain  copy
 print ?
  1. #ifndef WIDGET_H  
  2. #define WIDGET_H  
  3.   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9.   
  10. class Widget : public QWidget  
  11. {  
  12.     Q_OBJECT  
  13.   
  14. public:  
  15.     explicit Widget(QWidget *parent = 0);  
  16.     ~Widget();  
  17.   
  18. private slots:  
  19.     void calc();    //槽函数,用于计算并显示  
  20.   
  21. private:  
  22.     QLabel *label_ans, *label_add;  
  23.     QLineEdit *num1, *num2;  
  24.     QPushButton *button_calc;  
  25.     QHBoxLayout *layout;  
  26. };  
  27.   
  28. #endif // WIDGET_H  


//widget.cpp1

[cpp]  view plain  copy
 print ?
  1. #include "widget.h"  
  2.   
  3. Widget::Widget(QWidget *parent) :  
  4.     QWidget(parent)  
  5. {  
  6.     label_ans = new QLabel("0"this);  
  7.     label_add = new QLabel("+"this);  
  8.   
  9.     num1 = new QLineEdit(this);  
  10.     num2 = new QLineEdit(this);  
  11.     button_calc = new QPushButton("="this);  
  12.   
  13.     layout = new QHBoxLayout;  
  14.     layout->addWidget(num1);  
  15.     layout->addWidget(label_add);  
  16.     layout->addWidget(num2);  
  17.     layout->addWidget(button_calc);  
  18.     layout->addWidget(label_ans);  
  19.     this->setLayout(layout);  
  20.   
  21.     QObject::connect(button_calc, SIGNAL(clicked(bool)), this, SLOT(calc()));    //信号槽  
  22. }  
  23.   
  24. Widget::~Widget()  
  25. {  
  26.   
  27. }  
  28.   
  29. void Widget::calc()  
  30. {  
  31.    label_ans->setText(QString::number(num1->text().toInt() + num2->text().toInt()));    //获取文本消息以后,变成int,相加以后变成QString  
  32. }  
//main.cpp是默认的东西,这里就不贴出来了

版本1.0运行截屏


版本二

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

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

//头文件

[cpp]  view plain  copy
 print ?
  1. #ifndef WIDGET_H  
  2. #define WIDGET_H  
  3.   
  4. #include   
  5. #include   
  6. #include   
  7. #include   
  8. #include   
  9. #include   
  10. #include   
  11.   
  12. class Widget : public QWidget  
  13. {  
  14.     Q_OBJECT  
  15.   
  16. public:  
  17.     explicit Widget(QWidget *parent = 0);  
  18.     ~Widget();  
  19.   
  20. private slots:  
  21.     void calc();  
  22.   
  23. private:  
  24.     QLabel *label_ans;  
  25.     QLineEdit *num1, *num2;  
  26.     QPushButton *button_calc;  
  27.     QHBoxLayout *layout;  
  28.     QRadioButton *select[4];    //选项组,因为全局只有一个组,所以不用设为一个RadioGroup  
  29.     QVBoxLayout *select_layout;    //专门给上面的选项布局用的 垂直布局方式  
  30. };  
  31.   
  32. #endif // WIDGET_H  

//主方法

[cpp]  view plain  copy
 print ?
  1. #include "widget.h"  
  2.   
  3. Widget::Widget(QWidget *parent) :  
  4.     QWidget(parent)  
  5. {  
  6.     label_ans = new QLabel("0"this);  
  7.     select[0] = new QRadioButton("+"this);  
  8.     select[1] = new QRadioButton("-"this);  
  9.     select[2] = new QRadioButton("*"this);  
  10.     select[3] = new QRadioButton("/"this);  
  11.     num1 = new QLineEdit(this);  
  12.     num2 = new QLineEdit(this);  
  13.     button_calc = new QPushButton("="this);  
  14.   
  15.     layout = new QHBoxLayout;  
  16.     select_layout = new QVBoxLayout;  
  17.     select_layout->addWidget(select[0]);  
  18.     select_layout->addWidget(select[1]);  
  19.     select_layout->addWidget(select[2]);  
  20.     select_layout->addWidget(select[3]);  
  21.   
  22.     layout->addWidget(num1);  
  23.     layout->addLayout(select_layout);    //嵌套布局  
  24.     layout->addWidget(num2);  
  25.     layout->addWidget(button_calc);  
  26.     layout->addWidget(label_ans);  
  27.     this->setLayout(layout);  
  28.   
  29.     QObject::connect(button_calc, SIGNAL(clicked(bool)), this, SLOT(calc()));  
  30. }  
  31.   
  32. Widget::~Widget()  
  33. {  
  34.   
  35. }  
  36.   
  37. void Widget::calc()  
  38. {  
  39.    int a = num1->text().toInt();  
  40.    int b = num2->text().toInt();    //因为会多次用到这些数据,所以提前取出来  
  41.   
  42.    if (select[0]->isChecked())  
  43.    {  
  44.         label_ans->setText(QString::number(a + b));  
  45.    }  
  46.    else if (select[1]->isChecked())  
  47.    {  
  48.         label_ans->setText(QString::number(a - b));  
  49.    }  
  50.    else if (select[2]->isChecked())  
  51.    {  
  52.         label_ans->setText(QString::number(a * b));  
  53.    }  
  54.    else if(select[3]->isChecked())  
  55.    {  
  56.         if (b == 0)    //判断是否为0  
  57.             label_ans->setText("Zero Error");  
  58.         else  
  59.             label_ans->setText(QString::number(a / b));  
  60.    }  
  61.    else  
  62.    {  
  63.        label_ans->setText("Please Choose A Calc Method!");  
  64.    }  
  65. }  
版本1.1运行效果图

你可能感兴趣的:(QT)