Qt学习笔记二

继上周学习了Qt信号与槽的相关知识,仿佛开辟了一个新天地。信号和槽用于两个对象之间的通信,信号和槽机制是Qt的核心特征,也是Qt不同于其他开发框架的最突出特征。这次我要完成的是计算器,分成三步

(1)完成加法运算
(2)完成加减乘除运算
(3)利用信号和槽产生另一个对话框

1.加法运算

新建一个窗口工程,在ui文件中画出图1所示
这里写图片描述
注意右击更改对象名称三个行编辑器我命名的是firstLineEdit,secondLineEdit,resultLineEdit,计算的按钮我命名为calButton,我们想完成的是输入两个加数的时候,点击计算按钮输出结果,这里存在信号和槽,计算按钮发出点击信号,resultLineEdit输出计算结果,建立槽函数的方式可以右击计算按钮选择“转到槽…”,也可以在函数中定义
mainwindow.h

#ifndef MAINWINDOW_H
#define MAINWINDOW_H

#include <QMainWindow>

namespace Ui {
class MainWindow;
}

class MainWindow : public QMainWindow
{
    Q_OBJECT
//元对象系统必须加Q_OBJECT
public:
    explicit MainWindow(QWidget *parent = 0);
    ~MainWindow();

private slots:
       void calSlot();//槽函数声明

       //void on_calButton_clicked();元对象系统创建,右击UI文件“计算”按钮转到槽自动生成

private:
    Ui::MainWindow *ui;
};

#endif // MAINWINDOW_H

mainwindow.cpp文件中添加

#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    this->setMaximumSize(393,150);
    this->setMinimumSize(393,150);//设置窗口大小
    QObject::connect(ui->calButton,SIGNAL(clicked()),this,SLOT(calSlot()));//信号和槽的连接
}

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

void MainWindow::calSlot()//槽函数定义
{
      int first=ui->firstLineEdit->text().toInt();//将加数转换为int类型
      int second=ui->secondLineEdit->text().toInt();
      int result;

      result=first+second;
      ui->resultLineEdit->setText(QString::number(result));


//void MainWindow::on_calButton_clicked()
}

运行就可以了。

2.加减乘除运算

在ui文件中将加号改为comboBox下拉列表框,双击添加项目+,-,*,/四则运算,需要调用comboBox函数currentIndex函数,这是将comboBox里的项目编号的函数
只需要将槽函数修改一下就可以

void MainWindow::calSlot()
{
      int first=ui->firstLineEdit->text().toInt();
      int second=ui->secondLineEdit->text().toInt();//转为int类型
      int result;
      if(ui->comboBox->currentIndex()==0)//判断+是否被选
      {
          result=first+second;
          ui->resultLineEdit->setText(QString::number(result));
      }
      else if(ui->comboBox->currentIndex()==1)//判断-是否被选
      {
          result=first-second;
          ui->resultLineEdit->setText(QString::number(result));
      }
      else if(ui->comboBox->currentIndex()==2)//判断*号
      {
          result=first*second;
          ui->resultLineEdit->setText(QString::number(result));

      }
      else if(ui->comboBox->currentIndex()==3)//判断/号
      {
          if(second==0)
             {return;}

          result=first/second;
          ui->resultLineEdit->setText(QString::number(result));
         //setText设置文本  

      }


}

最后运行结果
这里写图片描述

3.产生另一个对话框

这里需要介绍另一个类QMessageBox,通过帮助我们可以看到介绍QMessageBox类提供了一个模式对话框,用于通知用户或询问用户一个问题并得到答案。
一个消息框显示一个主文本,以提醒用户一个情况,一个信息文本进一步解释警报,或者询问用户一个问题,以及一个可选的详细文本,如果用户请求的话,可以提供更多的数据。一个消息框还可以显示一个图标和标准按钮来接受用户的响应。
只需要对槽函数void MainWindow::calslot()的定义更改为

void MainWindow::calSlot()
{
      int first=ui->firstLineEdit->text().toInt();
      int second=ui->secondLineEdit->text().toInt();
      int result;
      if(ui->comboBox->currentIndex()==0)
      {
          result=first+second;
          ui->resultLineEdit->setText(QString::number(result));
      //调用静态方法
          QMessageBox::information(this,"Result",QString::number(result));//调用
      }
      else if(ui->comboBox->currentIndex()==1)
      {
          result=first-second;
          ui->resultLineEdit->setText(QString::number(result));
          QMessageBox::information(this,"Result",QString::number(result));
      }
      else if(ui->comboBox->currentIndex()==2)
      {
          result=first*second;
          ui->resultLineEdit->setText(QString::number(result));
          QMessageBox::information(this,"Result",QString::number(result));
      }
      else if(ui->comboBox->currentIndex()==3)
      {
          if(second==0)
             QMessageBox::warning(this,"Error Message","Second Can't be Zero!!");



          result=first/second;
          ui->resultLineEdit->setText(QString::number(result));
           QMessageBox::information(this,"Result",QString::number(result));

      }
      //setText设置文本

}

还有个重要地方要注意,在mainwindow.h头文件中加上包含

#include <QMessageBox>//消息对话框

最后运行出来的结果如下:
这里写图片描述
好了,至此三个过程均完成!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值