QT中的信号与槽

Q_OBJECT

使用信号与槽的类中,必须要加入宏 Q_OBJECT

signal & slot

信号与槽之间的绑定
QObject::connect(sender , SIGNAL(signal()), receiver, SLOT(slot()));
QObject :是QT所以类的父类
connect() :是一个静态函数
sender:是发送信号的对象名称,参数为指针
signal():是发送的对象的信号函数名称
receive:是槽函数对象的名称,参数为指针
slot():是接受对象的槽函数名称
SIGNAL() 和 SLOT() 是用来指明信号和槽,并将其转为相对应的字符串。

信号与槽的断开,
信号与槽的根本是由信号触发槽,只要将信号设置为断联,就不可能产生槽函数,所有断联主要针对信号函数
//断开一切与 sender 对象连接的信号与槽。
QObject::disconnect(sender,0,0,0);		//静态写法
sender->disconnect();								//非静态写法

//断开特定信号的连接
QObject::disconnect(sender,SIGNAL(signal),0,0);	//静态写法
sender->disconnect(SIGNAL(signal()));

//与指定的接收者断开连接
QObject::disconnect(sender, 0, receiver, 0);
sender->disconnect(receiver);

信号与槽的关系

1.当多个槽函数与一个信号连接时,先建立连接的槽函数先执行,是队列的关系。
2.信号与槽建立连接时,函数有参数要写出参数类型,严格来说信号参数要与槽参数一致,当信号参数少于槽参数会报错。(信号只是通知者,参函数执行时缺少参数会报错,信号参数多时,参函数只会取靠近函数名的参数,因为参数的入栈是从后往前入栈)
3.多个信号可以连接同一个槽,信号可以连接信号。
4.槽函数是异步执行,当发送一个信号,槽函数会打断现在的执行过过程,槽函数执行完毕,恢复执行过程。

信号与槽的实现

1.信号需要在 signals 修饰的区域进行定义。
2.信号的定义不需要关键字 public 修饰。
3.槽函数可以是成员函数,静态成员函数,全局函数。
4.信号和槽的返回类型和参数类型要一致。

总结

在信号与槽中,信号是不需要定义,槽需要定义,因为 moc 会根据 Q_OBJECT 这个字符串进行检测该类是否需要将 信号定义出一个向消息队列发送消息,且进行信号与槽之间得关联。信号与槽得实现大体为调用信号函数,即向队列发送消息,主线程专门等待队列的消息,获取到消息,去寻找相对应的槽函数执行。槽函数最好在主线程,即UI线程中调用,在其他线程想要调用槽函数,最好转为触发信号函数,与之关联的槽函数会相应执行。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值