Qt中的事件监听机制

1、引言

        事件监听通常用于处理用户点击某个按钮时,对用户点击行为的响应,在任何图形化的交互式应用中都是必备的。那么在QT中的事件监听机制又是怎么回事呢?QT中的事件监听是用信号与槽的形式实现的。乍一听,似乎又是一个难懂的东西,但其实也就这么回事儿,这里我就来浅谈一下Qt中的信号与槽。

2、概念

        什么是信号与槽,简单来说信号就是用户的点击行为,槽就是用户点击行为的响应者,用户一旦触发点击,相应的槽函数就会被调用,执行对应的功能。

3、信号与槽的类型

        Qt中的信号与槽主要分为两种,一种是自动关联信号与槽,另一种是自定义信号与槽。自动关联信号与槽是直接由Qt开发软件自动生成,方便快捷。自定义信号与槽是由自己按照既定的规则自己去实现,每一步都需要用户去单独操作,比较繁琐但是可以自定义函数名。

4、信号与槽实现

4.1、自动关联信号与槽实现

        4.1.1、在创建的项目中拖入一个push Button,双击这个按钮改变显示的名字。如图所示

Qt中的事件监听机制_第1张图片

        4.1.2、选中这个按钮,点击鼠标右键,在弹出的快捷菜单中点击转到槽,如图所示

Qt中的事件监听机制_第2张图片

然后选中下图所示按钮,点击ok按钮,这样就实现了自动关联信号与槽。

Qt中的事件监听机制_第3张图片

        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()
{
    //这里就是槽函数代码,具体的响应在这里实现就行
}

4.2、自定义信号与槽实现

        再生成一个按钮改变名字为自定义,在对应的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那里:

Qt中的事件监听机制_第4张图片

5、最终效果

Qt中的事件监听机制_第5张图片

你可能感兴趣的:(qt,开发语言)