【Qt】Qt中的信号槽

一、信号和槽概述

       信号槽是Qt矿建引以为豪的机制之一。

       所谓信号槽,实际上就是观察者模式(发布——订阅模式)。当某个事件发生之后,比如,按钮检测到自己被点击了一下,它就会发出一个信号。这种发出的信号是没有目的的,类似于广播。如果有对象对这个信号感兴趣,它就会使用连接函数(connect),意思是将想要处理的信号和自己的一个函数(称为槽)绑定来处理这个信号。也就是说,当信号发出时,被连接的槽函数会自定被回调。

       这就类似于观察者模式:当发生了感兴趣的事件,某一个操作就会被自动触发。

1.1 信号的本质

       信号是由于用户对窗口或控件进行了某些操作,导致窗口或控件产生了某个特定事件,这时候Qt对应的窗口类会发出某个信号,对用以此户的挑选做出反应。

根据上面的论述,我们可以得出一个结论——信号的本质就是事件,例如:

  • 按钮单击、双击
  • 窗口刷新
  • 鼠标移动、鼠标按下、鼠标释放
  • 键盘输入

在Qt中,信号是通过什么形式呈现给使用者的呢??

  • 我们对哪个窗口进行操作,哪个窗口就可以捕捉到这些被触发的事件
  • 对于使用者来说,触发一个事件,我们就可以得到Qt框架给我们发出的某个特定信号
  • 信号的呈现形式就是函数,也就是说某个事件产生了,Qt框架就会调用某个对应的信号函数,通知使用者。

       在Qt中信号的发出者是某个实例化的类对象,对象内部可以进行相关事件的检测。

1.2 槽的本质

       在Qt中,槽函数是一类特殊功能的函数,在编码过程中,也可以作为类的普通成员函数来使用。之所以称之为槽函数,是因为它们还有一个职责就是对Qt框架中产生的信号进行处理。

举个例子:

        有一天,我们在和女朋友一起逛街,突然,女朋友说:“我肚子饿了!”,于是我们带着她们去吃饭。(这就相当于女朋友发出一个信号,我收到信号并将其处理掉)

实例对象 角色 描述
女朋友 信号发出者 信号携带的信息:我饿了
信号接收者 处理女朋友发射的信号:带她去吃饭

       在Qt中槽函数的所有者也是某个类的实例对象。

1.3 信号和槽的关系

在Qt中,信号和槽函数都是独立的个体,本身没有任何联系,但是由于某种特性需求,我们可以将二者连接在一起,好比牛郎和织女想要见面,必须要有喜鹊为他们搭桥。

在Qt中,我们需要使用QObject类中的connect函数进行两者的关联。

连接信号和槽的connect()函数原型如下,其中PointerToMenberFunction是一个指向函数地址的指针:

QMetaObject::Connection QObject::connect(
    const QObject* sender, PointerToMemberFunction signal,
    const QObject* recei
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

加油,旭杏

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值