QT中信号与槽学习总结

最近准备写一个QT的项目,功能比较复杂,考虑到这一点,我必须把信号与槽好好温习一遍,因为,QT中,最重要也就是信号与槽,其余的东西也就只是软件逻辑而已。

先看一个案例:


现在要这样来实现:

当我按下Exit这个按键的时候,窗口关闭。

当我按下PushButton这个按键的时候,PushButton这个名字变成hello

当我往右滑动滑动条的时候,数码管数字加,往左则减。

看主要的代码,MainWindow.cpp这个文件中:

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

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    connect(ui->Exit,SIGNAL(clicked()),this,SLOT(close()));
    connect(ui->pushButton,SIGNAL(clicked()),this,SLOT(change_text()));
    connect(ui->horizontalSlider,SIGNAL(valueChanged(int)),ui->lcdNumber,SLOT(display(int)));
}

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

//slot fuction
void MainWindow::change_text()
{
    ui->pushButton->setText("hello");
}

如代码实现,一共有3个connect,先解释第一个。

(1)第一个connect

connect(ui->Exit,SIGNAL(clicked()),this,SLOT(close()));

意思是:

ui->Exit,当前ui窗口中的Exit这个对象

SIGNAL(clicked()),一个单击的信号

this,this指针,表示当前的类中,当前类就是MainWindow。

SLOT(close()),槽函数,作用是调用close()函数实现窗口关闭。

与connect连接就很清晰了。当对Exit这个对象(也就是Exit这个按钮),操作clicked(),也就是用鼠标点击,就会对this(也就是当前类,当前类也就是MainWindow,是一个窗口)触发一个槽函数close()的操作(也就是关闭窗口)。

(2)第二个connect

前三个参数就不用说明,和上面的类似,区别只是操作的对象为pushbutton。

重点看第四个参数中的槽函数change_test(),这里的槽函数是可以自己去实现的,而(1)中的close()函数是系统自带的,区别就在这里。我们同样可以实现自己的槽函数,去处理自己的事情,因为槽可以有多个。

(3)第三个connect

这个案例很直观,就是当向右滑动滑动条的时候,LCDNum这个控件上的数字就会自加,这里的信号中的Valuechanged函数就是改变数值的意思,最后槽函数是display,是系统自带的槽函数,意思是将改变的数值显示出来。


总结:QT中信号与槽机制,就是两个对象之间的一个桥梁,有点像物联网协议中的MQTT协议,相当于一个是发布者,一个就是订阅者,发布者可以理解为第一个对象的SIGNAL,订阅者就可以理解为第二个对象中的SLOT,最终的目的就是将SIGNAL和SLOT连接起来。



猜你喜欢

转载自blog.csdn.net/morixinguan/article/details/79868115