qt中信号和槽机制

news2024/11/14 20:07:52

文章目录

  • 信号与槽机制
    • 实现 点击按钮 关闭窗口的案例
  • 自定义信号槽
    • 自定义信号
    • 自定义槽函数
    • 触发自定义的信号
    • 案例:请老师吃饭
  • 断开信号
  • 当槽函数遇到重载的时候
  • 拓展

信号与槽机制

在这里插入图片描述

  • connect(信号的发送者, 发送的具体信号,信号的接受者,信号的处理(槽))

    • 注:如果信号的接受者是 this ,那么可以省略
  • 信号槽的优点,松散耦合,信号发送端和接收端本身是没有关联的,通过connect连接,将两端耦合在一起

实现 点击按钮 关闭窗口的案例

connect(myBtn,&QPushButton::clicked,this,&QWidget::close);

自定义信号槽

自定义信号

  1. 返回void
  2. 需要声明,不需要实现
  3. 可以有参数
  4. 写到signals 下

自定义槽函数

  1. 返回void
  2. 需要声明,也需要实现
  3. 可以有参数,可以重载
  4. 写到 public slot 下或者 public 或者 全局函数

触发自定义的信号

​ emit 自定义信号

案例:请老师吃饭

student.h

#ifndef STUDENT_H
#define STUDENT_H

#include <QObject>



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

signals:

public slots:
    //槽函数
    //早起Qt版本 必须写到public slots 高级版本可以写到public或者全局下
    //返回值 void ,需要声明,也需要实现
    //可以有参数,可以发生重载
    void treat();
};

#endif // STUDENT_H


student.cpp

#include "student.h"
#include <QDebug>


Student::Student(QObject *parent) : QObject(parent)
{

}


void Student::treat()
{
    qDebug()<<"请老师吃饭";
}


teacher.h

#ifndef TEACHER_H
#define TEACHER_H

#include <QObject>

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

signals:
    //自定义信号 写到signal下
    //返回值是void 只需要声明,不需要实现
    //可以有参数 ,可以重载
    void hungry();


};

#endif // TEACHER_H


teacher.cpp

#include "teacher.h"

Teacher::Teacher(QObject *parent) : QObject(parent)
{

}


widget.h

#ifndef WIDGET_H
#define WIDGET_H

#include <QWidget>
#include "student.h"
#include "teacher.h"

QT_BEGIN_NAMESPACE
namespace Ui { class Widget; }
QT_END_NAMESPACE

class Widget : public QWidget
{
    Q_OBJECT

public:
    Widget(QWidget *parent = nullptr);
    ~Widget();

private:
    Ui::Widget *ui;

    Teacher * zt;
    Student * st;

    void classIsOver();

};
#endif // WIDGET_H

widget.cpp

#include "widget.h"
#include "ui_widget.h"

//Teacher 类 老师类
//Student 类 学生类
//下课后 ,老师会触发一个信号,饿了,学生响应信号,请客吃饭

Widget::Widget(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::Widget)
{
    ui->setupUi(this);

    //创建一个老师对象 放到对象树中new Teacher(this) 就不用管他的释放了
    this->zt = new Teacher(this);
    //创建一个学生对象
    this->st = new Student(this);
    //老师饿了 学生请客的链接
    connect(zt,&Teacher::hungry,st,&Student::treat);

    //调用下课 函数
    classIsOver();

}

void Widget::classIsOver()
{
    //下课函数 调用后 触发老师饿了的信号
    //触发 emit 关键字
    emit zt ->hungry();

}


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

main.cpp

#include "widget.h"

#include <QApplication>

int main(int argc, char *argv[])
{
    QApplication a(argc, argv);
    Widget w;
    w.show();
    return a.exec();
}

断开信号

在这里插入图片描述

当槽函数遇到重载的时候

  • 当槽函数遇到重载的时候,槽函数在调用的时候就会不明确,此时我们就要用函数指针指定是哪个函数

带有重载的槽函数
在这里插入图片描述
信号
在这里插入图片描述

  • 使用函数指针指定槽函数 , 不然就会报错
    在这里插入图片描述

拓展

  1. 信号可以连接信号
  2. 一个信号可以连接多个槽函数
  3. 多个信号 可以连接 同一个槽函数
  4. 信号和槽函数的参数 必须类型一一的对应
  5. 信号和槽的参数个数 是不是要一致?信号的个数 可以多于槽函数的参数个数

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/447260.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringAop详解汇总

文章目录 近期想法什么是AOPSpringAOP与AspectjSpringAOP体系概述概念详解连接点- Jointpoint切入点- Pointcut通知- Advice切面- Aspect织入- Weaving 实现原理—动态代理JDK动态代理描述原理代码示例注意执行结果 优点缺点 CGLib动态代理描述原理代码示例注意执行结果 优点缺…

【UITableViewCell单元格重用补充 Objective-C语言】

一、咱们再把刚才说的UITableViewCell单元格重用的思路再给大家捋一下 1.咱们刚才说的这个单元格重用就是,当我们滚动的时候,这里给大家简单画一下, 2.就是滚动的时候,当把这个最上面的单元格滚完毕以后,把这个单元格放到缓存池里面, 3.给这个单元格要起一个ID,给它做一…

阿里云部署Stable Diffusion

系列文章目录 本地部署Stable Diffusion教程&#xff0c;亲测可以安装成功 Stable Diffusion界面参数及模型使用 谷歌Colab云端部署Stable Diffusion 进行绘图 文章目录 系列文章目录前言一、AIGC是什么&#xff1f;二、操作步骤1.资源准备-零元开通试用套餐2.创建应用3.输入…

使用matlab基于神经网络进行光束选择

一、前言 此示例说明如何使用神经网络来减少光束选择任务中的开销。在此示例中&#xff0c;您仅使用接收方的位置&#xff0c;而不是通信信道的知识。您可以通过在选定的波束对中进行搜索来减少波束扫掠开销&#xff0c;而不是对所有波束对进行详尽的波束搜索K光束对。考虑到一…

R语言ggplot2 | 修改ggplot主题

&#x1f4cb;文章目录 图形设置&#xff08;settings&#xff09;面板设置和背景&#xff08;Panel&Background&#xff09;坐标轴设置&#xff08;Axis&#xff09;标题和标签&#xff08;Title&label&#xff09;图例&#xff08;Legend&#xff09;副标题和图注&am…

静态和动态NAT,NAPT配置简介

一.类型介绍 二.功能 1.将大量的私有地址转换为公有地址(节约IP地址) 2.将一个IP地址转换为另一个IP地址(增加内部网络设备的安全性) 三.缺陷&#xff1a; 1.很消耗网络设备资源 2.破坏数据端到端传输&#xff0c;安全策略实施受限 四.配置命令 1.静态模式&#xff08;…

押注零知识证明赛道,Conflux与ACCSEAL达成战略合作

Conflux与新兴零知识证明加速芯片制造公司ACCSEAL宣布达成战略合作&#xff0c;携手共同布局零知识证明&#xff08;Zero-Knowledge Proof&#xff0c;简称ZKP&#xff09;赛道&#xff0c;探索可应用于Conflux生态系统的最先进零知识证明技术和解决方案。早在2022年3月&#x…

白话文讲计算机视觉-第九讲-霍夫变换之直线检测

霍夫变换是1962年由霍夫发明的一种检测图像中直线、圆等形状的方法。后来1972年经过Richard O. Duda和Peter E. Hart改进&#xff0c;形成了今天的霍夫变换算法。 今天我就带大家了解了解霍夫变换之直线检测是怎么特么的一回事。 1.霍夫变换 说到霍夫变换&#xff0c;首先就得…

C++——类和对象

作者&#xff1a;几冬雪来 时间&#xff1a;2023年4月21日 内容&#xff1a;C类和对象 目录 前言&#xff1a; 1.inline函数&#xff1a; 2.auto&#xff08;补充&#xff09;&#xff1a; 3.类&#xff1a; 4.类的访问限定符及封装&#xff1a; 5.封装&#xff1a;…

从零开始下载torch+cu(无痛版)

从零开始下载torchcu&#xff08;无痛版&#xff09; 文章目录 从零开始下载torchcu&#xff08;无痛版&#xff09;一&#xff0c;前言二&#xff0c;配置torch的GPU版具体步骤1,查看电脑安装的Cuda版本2&#xff0c;在pytoch官网检索待下载whl包名以及版本3&#xff0c;下载指…

playwright实战篇(tx、ali225)

人人都笑金角&#xff0c;人人都是金角推荐文章&#xff1a; 1、https://playwright.dev/python/docs/api/class-playwright //官方文档 2、https://cuiqingcai.com/36045.html //崔庆才教程 3、https://github.com/qqq732004709/ //实战参考 4、https://www.cnblogs.com/ca…

asp.net mvc网上书店购物系统(带项目文档)

c#_asp.net mvc网上书店购物系统&#xff08;带项目文档&#xff09; mvc网上书店购物系统 主要技术&#xff1a; 基于asp.net mvc架构和sql server数据库&#xff0c;并采用EF实体模型开发。 功能模块&#xff1a; 系统包括前台和后台两个部分&#xff0c;用户可在前台浏览…

KL散度和交叉熵的对比介绍

KL散度&#xff08;Kullback-Leibler Divergence&#xff09;和交叉熵&#xff08;Cross Entropy&#xff09;是在机器学习中广泛使用的概念。这两者都用于比较两个概率分布之间的相似性&#xff0c;但在一些方面&#xff0c;它们也有所不同。本文将对KL散度和交叉熵的详细解释…

学系统集成项目管理工程师(中项)系列03_职业道德规范

1. 职业道德 1.1. 涵盖了从业人员与服务对象、职业与职工、职业与职业之间的关系 1.2. 是所有从业人员在职业活动中应该遵循的行为准则 1.3. 包括爱岗敬业、诚实守信、办事公道、服务群众和奉献社会 2. 道德 2.1. 通常与法律相对应&#xff0c;具有非强制性 2.2. 指人们依…

《花雕学AI》26:多维度了解ChatGPT思维链提示的原理、方法、使用和发展的22个问题

早上5点起床&#xff0c;没有去打羽毛球&#xff0c;打开电脑&#xff0c;漫无边际的浏览&#xff0c;偶然发现了一个提法&#xff1a;ChatGPT思维链提示。于是&#xff0c;我使用与ChatGPT同源技术的新Bing引擎&#xff08;GPT-4&#xff09;&#xff0c;来进行搜索与了解相关…

基于在线优化的快速模型预测控制仿真Fast_MPC(Matlab代码实现)

目录 &#x1f4a5;1 概述 &#x1f4da;2 运行结果 &#x1f389;3 参考文献 &#x1f468;‍&#x1f4bb;4 Matlab代码 &#x1f4a5;1 概述 ​模型预测控制(Model Predictive Control,MPC)是一种基于在线计算的控制优化算法,能够统一处理带约束的多参数优化控制问题。…

ESP8266 最简单的OTA升级模式

最近在做一个项目时有OTA的需求&#xff0c;之前是通过arduino自带的ota模式&#xff0c;虽说也可以用&#xff0c;但操作比较麻烦&#xff0c;昨晚在网上搜索相关教程&#xff0c;发现了使用巴法云来实现ota的功能&#xff0c;现分享如下 1、首先要让你的设备联网 2、注册巴法…

jsp基础语法

前提 安装jdk参考 下载tomcat解压&#xff0c;运行tomcat不报错即可 第一个jsp程序 切换到webapps下ROOT文件夹下&#xff0c;将除了WEB-INF文件外的全部内容删除&#xff0c;新建index.jsp index.jsp内容如下 <!DOCTYPE html> <html lang"zh-CN"&g…

React Proxy 详细流程与配置方式(webpack、setupProxy.js、package.json)

一、 package.json 配置方式 全部以 GET 请求为例&#xff0c;每次修改配置后&#xff0c;重启项目&#xff0c;否则不生效。 访问 http://127.0.0.1:6000/api/user/list 接口为例检查自己脚手架版本 $ create-react-app -V若脚手架版本在 2.0 以下&#xff0c;可以使用对象类型…

【C++】deque的实现原理简单介绍

前言 deque被称为双端队列&#xff0c;它的出现主要是为了结合vector和list的优点并减小它们的缺点&#xff0c;实际上deque确实结合了vector和list的优点减小了它们的缺点&#xff0c;但是它的结合也让它自己的优点没有原始的vector和list那么极致&#xff0c;导致deque变得很…