QT自定义信号槽

QT自定义信号槽,第1张

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 

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 

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
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();
}

运行结果如下:

 

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zaji/5692119.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-17
下一篇 2022-12-17

发表评论

登录后才能评论

评论列表(0条)

保存