QT自定义信号槽

如果想要在QT类中自定义信号槽, 需要满足一些条件, 并且有些事项也需要注意:

1,要编写新的类并且让其继承Qt的某些标准类
2,这个新的子类必须从QObject类或者是QObject子类进行派生
3,在定义类的头文件中加入 Q_OBJECT 宏

自定义信号

1信号是类的成员函数  返回值必须是 void 类型
2信号的名字可以根据实际情况进行指定,参数可以随意指定, 信号也支持重载
3,信号需要使用 signals 关键字进行声明, 使用方法类似于public等关键字
信号函数只需要声明, 不需要定义(没有函数体实现),在程序中发射自定义信号: 发送信号的本质就是调用信号函数,习惯性在信号函数前加关键字: emit, 但是可以省略不写  emit只是显示的声明一下信号要被发射了, 没有特殊含义
 

#ifndef TEST1_H
#define TEST1_H

#include <QObject>

class Test1 : public QObject
{
    Q_OBJECT
public:
    explicit Test1(QObject *parent = nullptr);

signals:

public slots:
    void SayLove();
};

#endif // TEST1_H
#ifndef TESTSLOTS_H
#define TESTSLOTS_H

#include <QObject>

class TestSlots : public QObject
{
    Q_OBJECT
public:
    explicit TestSlots(QObject *parent = nullptr);

 signals:
    void SayHello();
public slots:
   // void SayToo();

};

#endif // TESTSLOTS_H
#include "test1.h"
#include<QDebug>
Test1::Test1(QObject *parent)
    : QObject{parent}
{

}
void Test1::SayLove()
{
    qDebug()<<"I Love you";
}
#include "mainwindow.h"
#include "ui_mainwindow.h"

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);
    //start是QPushButton  用connect 连接 发送者  接受者
    connect(ui->start,&QPushButton::clicked,this,&MainWindow::emitsignal);
    test1=new Test1(this);
    testslots=new TestSlots(this);
    connect(testslots,&TestSlots::SayHello,test1,&Test1::SayLove);

}

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

void MainWindow::emitsignal()
{
     emit testslots->SayHello();
}

运行结果如下:

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值