QT信号和槽:
我们举一个很简单的例子:我是阿拉丁,我捡到了一个神灯(我们都知道的一个寓言故事),那么
我擦拭灯,灯内飞出灯神,这样灯神就能实现我的三个愿望(hhh)
那么,我就是信号的发出者,擦拭灯这个动作,就是信号,灯,就是信号的接收者,灯神出来,就是信号的反应,也就是槽

1.信号

  • 使用signals关键字声明,只要有函数声明,不需要实现

  • 可以自定义信号

  • 没有返回值 void

  • 可以带参数 **:void sig1(int ,double,QString) ** Tips:要和槽函数的参数类型相对应

  • 可以使用emit关键字发送信号

2.槽

  • 可自定义槽函数:在

    • 类的任意成员函数

    • 静态函数

    • 全局函数

    • lambda表达式(c++11才支持)

  • 槽函数没有返回值 void类型

  • 可以带参数(同上)

3.连接(connect)

  • QT4中:
    1通过宏:SIGNAL和SLOT来使用信号函数和槽函数
connect(
sender,SIGNAL(sign1(int ,double,QString)),
receiver,
SLOT(slot1(int ,double,QStribg)));

缺点:编译时不会检查错误

  • QT5中
    1信号槽使用的函数地址:
connect(
    sender,//信号发出者
    &Sender::sig1,//信号
    receiver,//信号接收者
    &Receiver::slot1)//信号处理函数
   

优点:编译过程会对函数类型,个数做检查

注意事项

  • 信号,槽函数可以是不一样的:槽函数参数可以少于信号的参数个数,且不可逆
  • 信号,槽函数必须一一对应

5. 扩展

  • 信号可以连接信号
  • 一个槽函数可以同时被多个信号连接
  • 槽函数可以使用lambda表达式:万能公式:{}()为lambda表达式的标识
  • 信号,槽连接之后,可以被断开:disconnect
Logo

开源鸿蒙跨平台开发社区汇聚开发者与厂商,共建“一次开发,多端部署”的开源生态,致力于降低跨端开发门槛,推动万物智联创新。

更多推荐