QT中信号与槽学习总结

2019-07-13 06:16发布

最近准备写一个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)第一个connectconnect(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连接起来。