【Qt】简单聊聊信号与槽

注1:本系列文章使用的Qt版本为Qt 6.3.1
注2:本系列文章常规情况下不会直接贴出源码供复制,都以图片形式展示。所有代码,自己动手写一写,记忆更深刻。

关于信号与槽的个人理解

信号与槽是Qt特有的机制,它并不是C++的。在我们创建基本C++的类时是不能进行信号的发送与槽的实现的。

1、QObject类的重要性

任何类要使用信号与槽机制都必须继承于QObject类或其子类,同时还要在类的定义中写入Q_OBJECT宏。如下图:
在这里插入图片描述

2、信号与槽的本质是啥?

这其实是笔者常问面试者的一个问题,该问题的答案很简单:回调函数。那如何声明一个信号以及槽函数呢?如下图:
在这里插入图片描述

3、将信号与槽关联起来的纽带:connect

信号与槽在声明、定义时两者其实毫无关联,若要将信号与槽关联起来,必须使用connect函数。如下图:
在这里插入图片描述
在这里插入图片描述

简单说一下就是,当信号接收者接收到信号发送者发出的信号时,就执行一次槽函数
注:槽函数也可作为普通函数使用,它与普通函数的区别就是它可以响应信号。

4、信号与槽的参数能是自定义的数据结构(如结构体)吗?

答案是:可以。但是如果是跨线程使用信号与槽时,需要先注册参数的元对象类型。如下图:
在这里插入图片描述

5、信号与槽的参数可以不一致吗?

答案是:部分情况可以。详情如图:
在这里插入图片描述

6、connect神秘的第五个参数

打开帮助文档,在索引处输入"connect",并找到"connect"双击。
在这里插入图片描述
选择QObject Class并显示。我们可以看到,在查询出来的文档中,connect函数是具有五个参数的,不过第五个是默认值,且平时我们几乎不用。
在这里插入图片描述
点击第五个参数的类型,跳转到其说明。如下图:
在这里插入图片描述
后面就是每个枚举类型的相关说明。简单说一下,从上往下,依次的含义为:
①默认值,若信号发送者与接收者位于同一线程则采用②,否则采用③
②接到信号时立即响应槽函数,槽函数在信号所在的线程中执行。
③等到信号发送方执行完成后,回到信号接收者所在的线程中再执行。
④基本与③相同,不同之处在于,会把信号发送者所在的线程先阻塞,先返回接收者所在线程执行槽函数。
⑤一个标志位,使用 | 与①-④相结合,可以避免重复connect相同的信号与槽。
⑥Qt6新增的标志位,使用 | 与①-④相结合,可以让信号与槽成功激发一次后直接就断开连接,后续该信号无法被该槽函数响应。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值