QT一个信号可以触发多个槽吗?

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT一个信号可以触发多个槽吗?相关的知识,希望对你有一定的参考价值。

QT里面一个按钮信号可以触发两个槽吗,两个槽都是自己定义的。如果能实现,要怎么写呢?
connect(b1,SIGNAL(clicked()),this,SLOT(SetDisabled()));
connect(b1,SIGNAL(clicked()),this,SLOT(Get()));
这样写吗?
我这样试了,结果一按按钮就卡死了!怎么解决呢?

可以连接任意多个槽。
如果卡死了,一定是别的原因导致的。别在connect函数上浪费时间了,去你的slot函数里找找问题。追问

好像是没问题了。不过我现在有个疑问想问您。我的功能是这样的,这个按钮一按,我就把这个按钮设置不使能,然后开始读一个数30秒。设置按钮不使能主要是怕在这30s再按这个按钮会冲突。等30s数据读完了,在把按钮设置成使能。
可是无论我把这个按钮不使能发在和读数的一个函数里,还是把它另设一个函数。都不成功。每次按钮一按之后,等30秒读书显示了,这个按钮才被设置为不使能。我怎么能让它在一开始读书时就不使能呢。谢谢!

追答

看来你的读数过程是个同步过程,那么其实SetDisable()没有任何必要。因为在Get()函数返回之前,这个按钮不可能响应其他点击,是否disable其实没有任何影响。
同步读数会带来的问题就是:程序在Get()函数运行的这30秒内,看起来就跟死了一样,因为其他代码没有机会执行。
这也是为什么你看到按钮在Get()函数结束之后才被disable的原因。因为SetDisable()只是把按钮状态变成了disabled,但是这个函数不会去重新绘制界面。只有当Get()函数返回之后,重绘界面的代码才会执行,所以看起来就好象是过了30秒按钮才被disable。

参考技术A 你把要实现的功能放在一个槽函数不行吗?追问

没办法了。我的功能是这样的,这个按钮一按,我就把这个按钮设置不使能,然后开始读一个数30秒。设置按钮不使能主要是怕在这30s再按这个按钮会冲突。等30s数据读完了,在把按钮设置成使能。
但是问题是,如果我都放在一个槽里,这个设置不使能的功能只有在整个槽函数结束之后才会被设置。我试了很多次,用一个信号触发一个槽设置不使能,在再这个槽里触发一个信号触发另一个槽读30s数,结果都是在读完数之后设置不使能。

qt中c语言函数发送qt信号

参考技术A 这跟函数没关系,qt中发送信号用emit 信号 就可以了,例如我定义了一个信号为void test();那么我想触发此信号只需要执行emit test();就可以了。

以上是关于QT一个信号可以触发多个槽吗?的主要内容,如果未能解决你的问题,请参考以下文章

QT程序socket的readyRead信号不触发

Qt不同类之间如何emit信号进行触发操作?

Qt C++ 信号和槽没有触发

Qt信号与槽函数问题

Qt学习六 - 信号与槽

Qt emit同时发送信号给多个槽函数?