4.自定义的信号和槽

  • 自定义信号
    1.写到signal下
    2.返回void
    3.需要声明,不需要实现
    4.可以有参数,可以重载
  • 自定义槽函数
    1.返回void
    2.需要声明,也需要实现
    3.可以有参数,可以重载
    4.写到pulic slot下或者pulic或者全局函数
  • 触发自定义的信号
    1.emit 自定义信号
  • 案例:下课后,老师触发饿了信号,学生响应信号,请客吃饭。
#ifndef TEACHER_H
#define TEACHER_H

#include <QObject>

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

signals:
    //信号函数,老师饿了,只声明不实现
    void hungry();
};

#endif // TEACHER_H
#include "teacher.h"

Teacher::Teacher(QObject *parent)
    : QObject{parent}
{}
#ifndef STUDENT_H
#define STUDENT_H

#include <QObject>

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

signals:
public slots:
    //槽函数,需要声明,需要实现
    void treat();

};

#endif // STUDENT_H
#include "student.h"
#include<QDebug>
Student::Student(QObject *parent)
    : QObject{parent}
{}
void Student::treat()
{

    qDebug()<<"老师饿了,学生请客吃饭";
}

QT_BEGIN_NAMESPACE
namespace Ui {
class Widget;
}
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();
    void classOver();
private:
    Ui::Widget *ui;
    Teacher*t;
    Student*s;
};
#endif // WIDGET_H
#include "widget.h"
#include "ui_widget.h"

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    
    
    
    
    ui->setupUi(this);
    this->t=new Teacher(this);
    this->s=new Student(this);
    //先链接信号与槽
    connect(t,&Teacher::hungry,s,&Student::treat);
    //发出信号
    classOver();



}
//下课函数,封装激发信号的指令
void Widget::classOver()
{
    qDebug()<<"下课了!";
    emit t->hungry();  //激发信号
}
Widget::~Widget()
{
    delete ui;
}

posted @   噫~该死的碳酸饮料  阅读(11)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· 百万级群聊的设计实践
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
· 永远不要相信用户的输入:从 SQL 注入攻防看输入验证的重要性
点击右上角即可分享
微信分享提示