• 初见QT---信号和槽(二)


    带参数的自定义信号和槽

    举例分析:响铃后,老师需要发出下课的信号,并且要带有放学参数,学生才能做出离开教室的反应

    首先在teacher.h文件下重载信号函数

     1 #ifndef TEACHER_H
     2 #define TEACHER_H
     3 
     4 #include <QObject>
     5 
     6 class teacher : public QObject
     7 {
     8     Q_OBJECT
     9 public:
    10     explicit teacher(QObject *parent = nullptr);
    11 
    12 signals:
    13     //自定义信号 写到 signals下
    14     //返回值是void 只需要声明,不需要实现
    15     //可以有参数,可以重载
    16     void classover();
    17     void classover(QString leavesignal);
    18 };
    19 
    20 #endif // TEACHER_H

    然后在student.h下重载槽函数

     1 #ifndef STUDENT_H
     2 #define STUDENT_H
     3 
     4 #include <QObject>
     5 
     6 class student : public QObject
     7 {
     8     Q_OBJECT
     9 public:
    10     explicit student(QObject *parent = nullptr);
    11 
    12 signals:
    13 
    14 public slots:
    15     void leaveclass();
    16     //声明  重载函数
    17     void leaveclass(QString leavesignal);
    18 };
    19 
    20 #endif // STUDENT_H    

    其次在student.cpp下实现槽函数的功能

     1 #include "student.h"
     2 #include <QDebug>
     3 student::student(QObject *parent) : QObject(parent)
     4 {
     5 }
     6 void student::leaveclass(QString leavesignal)
     7 {
     8     //QString  ->char *    先转QByteArray (.tuUtf8) 再转 char *
     9     qDebug()<<"老师说"<<leavesignal.toUtf8().data();
    10 }

    最后在widget.cpp下连接信号和槽

     1 #include "widget.h"
     2 
     3 //Teacher类
     4 //Student类
     5 //铃声响了,老师发出下课的信号,学生接收信号做出离开教室的反应
     6 
     7 Widget::Widget(QWidget *parent)
     8     : QWidget(parent)
     9 {
    10     this->zt=new teacher(this);
    11     this->st=new student(this);
    12     //连接  带参数的信号和槽
    13     //指针  ->   地址
    14     //函数指针  ->   函数地址
    15     void (teacher:: *teachersignal)(QString)=&teacher::classover;
    16     void (student:: *studentsignal)(QString)=&student::leaveclass;
    17     connect(zt,teachersignal,st,studentsignal);
    18     classringing();
    19 }
    20 
    21 void Widget::classringing()
    22 {
    23     emit zt->classover("放学了");
    24 }
    25 
    26 Widget::~Widget()
    27 {
    28 }

    成果展示

  • 相关阅读:
    Flink实战(七十三):FLINK-SQL使用基础(一)简介(一)入门
    Flink实战(七十二):监控(四)自定义metrics相关指标(二)
    k8s启动
    k8s containerd
    安装containerd
    k8s镜像
    crictl
    Kubernetes: Using containerd 1.1 without Docker
    docker images --digests
    ctr images pull docker.io/library/redis:latest
  • 原文地址:https://www.cnblogs.com/GaJack/p/12933596.html
Copyright © 2020-2023  润新知