QT自定义信号槽

luckyFang 2021年06月30日 30次浏览

信号函数要求

  • 类必须直接或间接继承QOBJECT
  • 必须是类成员
  • signals关键字进行声明
  • 只需要声明不需要定义

发送信号 emit xxx

槽函数要求

  • 类必须直接或间接继承QOBJECT
  • 返回值必须为void
  • slots关键字进行声明
  • 槽函数参数与信号函数参数必须一一对应

示例程序

1⃣️新建一个类继承自QObject

#ifndef QBUTTON_H
#define QBUTTON_H

#include <QObject>
#include <QString>
class QButton : public QObject
{
    Q_OBJECT
public:
    explicit QButton(QObject *parent = nullptr);

};

#endif // QBUTTON_H

2⃣️声明信号函数


#ifndef QBUTTON_H
#define QBUTTON_H

#include <QObject>
#include <QString>
class QButton : public QObject
{
    Q_OBJECT
public:
    explicit QButton(QObject *parent = nullptr);

signals:
    void testSignal();
    void testSignal(int);
    void testSignal(QString);

};

#endif // QBUTTON_H

3⃣️声明槽函数

#ifndef QBUTTON_H
#define QBUTTON_H

#include <QObject>
#include <QString>
class QButton : public QObject
{
    Q_OBJECT
public:
    explicit QButton(QObject *parent = nullptr);

signals:
    void testSignal();

};

#endif // QBUTTON_H

4⃣️实现槽函数

void QButton::testSlot()
{
    qDebug()<<"no val";
}


5⃣️绑定信号与槽

// 创建一个实例
m_btn = new QButton();
connect(m_btn,&QButton::testSignal,this,&MainWindow::testSlot);

6⃣️发送信号

connect(ui->pushButton,&QPushButton::clicked,[this]{
	emit m_btn->testSignal();
});

image.png