事件监听通常用于处理用户点击某个按钮时,对用户点击行为的响应,在任何图形化的交互式应用中都是必备的。那么在QT中的事件监听机制又是怎么回事呢?QT中的事件监听是用信号与槽的形式实现的。乍一听,似乎又是一个难懂的东西,但其实也就这么回事儿,这里我就来浅谈一下Qt中的信号与槽。
什么是信号与槽,简单来说信号就是用户的点击行为,槽就是用户点击行为的响应者,用户一旦触发点击,相应的槽函数就会被调用,执行对应的功能。
Qt中的信号与槽主要分为两种,一种是自动关联信号与槽,另一种是自定义信号与槽。自动关联信号与槽是直接由Qt开发软件自动生成,方便快捷。自定义信号与槽是由自己按照既定的规则自己去实现,每一步都需要用户去单独操作,比较繁琐但是可以自定义函数名。
4.1.1、在创建的项目中拖入一个push Button,双击这个按钮改变显示的名字。如图所示
4.1.2、选中这个按钮,点击鼠标右键,在弹出的快捷菜单中点击转到槽,如图所示
然后选中下图所示按钮,点击ok按钮,这样就实现了自动关联信号与槽。
4.1.3、自动关联信号与槽生成的代码如下:
#include "mainwindow.h"
#include "ui_mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
//这里就是槽函数代码,具体的响应在这里实现就行
}
再生成一个按钮改变名字为自定义,在对应的ui头文件中定义槽函数和信号函数,然后在相应的cpp文件中实现槽函数,信号函数不用实现。这里要注意槽函数的命名,Qt中槽函数命名有要求,就参照系统命名方式命名即可,如果违反这个规则,槽函数就没有效果,具体请参照下方代码:
4.2.1、槽函数和信号定义代码
#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include
namespace Ui {
class MainWindow;
}
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = nullptr);
~MainWindow();
signals:
void customSignal();//自定义信号,无需实现
private slots:
//自动生成槽函数
void on_pushButton_clicked();
//自定义槽函数
void on_pushButton_2_clicked();
private:
Ui::MainWindow *ui;
};
#endif // MAINWINDOW_H
4.2.2、槽函数实现和槽函数和信号的关联
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent),
ui(new Ui::MainWindow)
{
ui->setupUi(this);
connect(ui->pushButton_2,//哪个对象发送的信号
SIGNAL(customSignal()),//发送的什么信号
this,//哪个对象接收这个信号
SLOT(on_pushButton_2_clicked()));//对应这个信号的哪个一个槽
}
MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
qDebug()<<"自动生成的槽函数";
//这里就是槽函数代码,具体的响应在这里实现就行
}
void MainWindow::on_pushButton_2_clicked()
{
//这里就是自定义槽函数代码,具体的响应在这里实现就行
qDebug()<<"自定义的槽函数";
}
4.2.2、关于对象名的查看
对象名查看请在ui操作界面在直接选中对应的按钮,然后查看下图所示objectName那里: