Qt框架学习01——信号与槽高级用法

1. 信号、槽和普通函数的执行顺序

1.1 发出信号后,是否会立即执行后面的函数

在这里插入图片描述

  • 函数和槽的执行顺序是什么?
    答:信号发出之后,首先执行的是槽函数,然后执行普通函数renameFile()

  • 总结:单线程的前提下,发出信号后,先执行槽函数,再执行普通函数

1.2 若信号与多个槽同时连接,槽函数执行顺序?

在这里插入图片描述

  • 槽函数的执行顺序?
    答:按顺序依次进行执行

  • 总结:按照connect连接的顺序执行

1.3 多个槽函数与普通函数的执行顺序?

在这里插入图片描述

  • 当一个信号连接了多个槽函数,并且后面还有普通函数,执行顺序是什么?
    答: 槽函数依次按顺序进行执行,最后执行普通函数

  • 总结: 符合第一条和第二条的规律

1.4 原理

信号槽只是在代码编写形式上进行了分离,而实质上仍然按顺序调用函数。

其实进行emit后,代码是被整合成了这个形式。
在这里插入图片描述

1.5 总结

  • 当信号发出之后,先执行槽函数

  • 如果槽函数有多个,则按照绑定顺序执行

  • 槽函数执行结束,执行普通函数

2. 获取信号的发出者

2.1 获取被点击按钮相关信息

  • 使用sender()获取
    在这里插入图片描述

  • 获取信号发出者及文本

QPushhButton* btn = dynamic_cast<QPushButton*>(sender());

3. 断开连接

3.1 disconnect

在这里插入图片描述
结构:(发送者,发送者对应的信号,接收者,接收者槽函数)

3.2 断开所有连接

例子:
在这里插入图片描述

disconnect(ui->spinBox,nullptr,nullptr,nullptr);

ui -> spinBox -> disconnect(nullptr,nullptr,nullptr);

3.3 断开valueChange(QString)关联信号的所有连接

disconnect(ui->spinBox,SIGNAL(valueChange(QString)),nullptr,nullptr);

3.4 断开接收者所有的连接

disconnect(ui->spinBox,nullptr,ui->progressBar,nullptr);

3.5 断开接收者槽函数的连接

disconnect(ui->spinBox,nullptr,ui->progressBar,SLOT(setWindowTitle(QString));

3.6 总结

在这里插入图片描述

  • singal / receiver / method 都可以设置为nullptr
  • obj -> disconnect
  • QObject::disconnect

4.QSingalMapper用法

为了防止建立过多的信号和槽,使代码杂乱无章,因此可以使用QSingalMapper的方法进行统一的管理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值