Qt 的几个核心机制总结之 信号与槽

信号与槽

1.功能:用于对象之间的通信

2.传统的GUI如何实现对象之间通信的?

使用的是回调函数(指向某个函数的指针),相比之下信号与槽的机制较为灵活,但是这种灵活是以损失性能为前提的,只不过信号与槽机制的性能仍然较高。

3.什么对象才能发射信号?

只有定义过该信号的类或者其派生类才能够发射该信号。

4.信号与槽的工作方式:

当一个信号被发射的时候这些槽就会被执行,只有当所有的槽正确放回后,发射函数才会返回。当一个信号与多个槽关联的时候,当这个信号发射的时候这些关联的槽就一一执行,但是他们的执行顺序是不定的,不能在程序中指定。在使用信号与槽的机制的时候要注意不要在槽中再将对应的信号发送出去,这样会形成死循环。

5.信号和槽的定义:

有信号和槽的类在定义的时候要在开始的地方加上Q_OBJECT编译器才知道使用moc工具进行扩展。

5.1 信号的定义:

使用关键词signals在类的头文件中定义

signal:
void  mysignal(para);

可以重载比如定义了上面的信号后还可以

void mysignal();

注意信号不需要定义函数实现,并且返回值都是void,信号代码会由moc工具自动生成。

5.2 槽的定义:

槽和信号定义的时候有个区别就是槽有访问权限,可以限制哪些对象的信号能够与之连接

public slots  任何对象都可以与之连接,一般用于组件类

protected slots 当前类以及子类的信号可以与之相连,一般用于类的实现部分

private slots  只有当前类可以讲信号与之关联。

槽的声明可以是虚函数,也可以重载,可以带有参数但是不能有默认参数,可以直接调用。

注意信号与槽的参数不能是函数指针,不能是模板类参数,同时不能使用默认参数。

6.信号与槽的连接:

一个信号可以连接一个槽   connect

一个信号可以连接多个槽

一个信号号可以连接一个信号  两个信号都会被发射

多个信号可以连接一个槽

信号与槽的连接可以断掉   

当一个对象呗删除的时候,Qt会将这个对象关联的所有连接断掉。 disconnect

要把信号与一个槽相连或者一个信号与信号相连,要注意他们的参数必须具有相同的顺序和相同的类型,如果信号的参数比相连的槽多的话,多余的参数将会被忽略掉,

但是要注意如果信号和槽对应的参数类型不一样的时候会报错。

如果发送者和接受者同属于一个对象的话,接受者的参数可以省略不写。

如果槽函数有返回值的话,返回值会被忽略。

7.信号的发送

使用关键词emit   

方法:在成员方法中使用emit  信号函数来发送信号。


  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值