栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > C/C++/C#

QT自定义信号槽

C/C++/C# 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

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

运行结果如下:

 

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/691634.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号