Qt槽函数的重入问题

Qt 专栏收录该内容
14 篇文章 0 订阅

在Qt的信号槽机制中,如果一个槽函数的执行时间很长,在槽函数还没有执行结束的时候,有新的信号产生,默认情况下,该次信号不会被丢弃,而是会等槽函数执行结束后再次调用槽函数
但是在某些情况下,如果想将槽函数执行过程中所产生的新信号丢弃掉,有以下两种方法:blockSignals和disconnect
假设有如下信号槽

connect(m_play, &QShortcut::activated, this, &Editor::play);

具体方法如下

blockSignals

void Editor::play()
{
	m_play->blockSignals(true); // 屏蔽信号
	// 槽函数实现
	m_play->blockSignals(false); // 启用信号
}

优点:轻量级实现,占用资源少
缺点:会屏蔽掉对象的所有信号,无法对单一信号进行控制

disconnect

void Editor::play()
{
	disconnect(m_play, &QShortcut::activated, this, &Editor::play);
	// 槽函数实现
	connect(m_play, &QShortcut::activated, this, &Editor::play);
}

优点:可以对单一信号进行控制
缺点:每次都要对信号进行重连,执行效率相对较低

  • 3
    点赞
  • 0
    评论
  • 2
    收藏
  • 一键三连
    一键三连
  • 扫一扫,分享海报

相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值