[起源]信号与槽

“信号与槽是Qt的一大创新,关联信号和槽可以完成定义某一事件的触发与事件触发后产生的效果等一系列动作。”

目录

一、信号

二、槽

三、连接

一、信号

信号的作用是当事件符合条件时,该信号被发射。在Qt中我们常用到的就是按钮点击事件的触发,他所发出的信号就是clicked(),还有就是lineedit中字符串改变所触发的信号。关于一些控件的信号我这里就不再赘述了,本文主要讲我们自己去定义一些信号怎么去触发。

我们声明信号时只需要在头文件内去声明,信号函数不可以有返回值,而信号的定义由moc自动生成,所以我们并不需要去实例化信号。常用的信号声明基本形式是

signals:
  void xxxxx();//不带参数发送
  void xxxxx(QString a,int b,...);//带参数发送

我们在头文件内定义好之后,就在我们想要他被触发的位置这样写

void nn()
{
  int a = 10;
  emit xxxxx();//发射信号
}

这样,我们的信号就发射完成了。

二、槽

当信号被触发后,程序要回调的函数。他的外观就是c++的函数,对于他的定义和其他的c++函数是一样的,但是在头文件中的声明要在slots下面,有三种形式private slots、protected slots、public slots。我们用private slots来举例

private slots:
  void yyyyy();//不带参数接收
  void yyyyy(QString a,int b,...);//带参数接收

在实例化时就把他当成是c++普通函数对待,只不过槽函数的触发需要去使用信号触发后来调用,而普通函数起源地是主函数。

三、连接

信号与槽使用connect连接起来,一般写在构造函数中就足够。连接时有以下几个特点:

1、一个信号可以连接多个槽

2、一个槽也可以接收多个信号

3、信号可以连接信号,后者信号被前者信号触发

4、带参数时,按照Qt4的规则应将信号和槽的形参类型对应即可,Qt5的写法则没有这种问题。

首先我们看一下Qt4的写法:

//不带参数
connect(sender,SIGNAL(Sender::xxxxx()),receiver,SLOT(Receiver::yyyyy()));
//带参数
connect(sender,SIGNAL(Sender::xxxxx(QString,int,...)),receiver,SLOT(Receiver::yyyyy(QString,int,...)));

Qt5写法(带参数和不带参数写法一样):

connect(Sender::sender,&Sender::xxxxx,Receiver::receiver,&Receiver::yyyyy);

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值