隔了一段没写qt4程序,突然要在qt4下开发个小工具,用到了多线程处理,使用了信号出发处理,哔哩啪啦的快速敲完了代码,信心满满的去编译,顺利通过,然后运行,正常跑起来了。然而在点击按钮触发信号后,发现居然没有响应?
然后就根据就去排查问题,首先查看connect函数绑定的时候,是否成功,检查发现成功了,那为什么没有响应呢?根据以往经验,把常见的槽函数没有响应的都排查了一遍,
1. 检查拥有信号槽的类,是否继承QObject,声明Q_OBJECT宏。
2. 信号槽函数签名不匹配
3. 参数类型没有注册
4. 信号槽没有定义为pubic/private slots
5. 信号函数未声明为 signals
6. 事件被子控件过滤掉了
7. 某事件循环被阻塞导致信号未能发出
8. 信号发出者和接收者的作用域,是否在信号发送前释放了接收者
9. connect的位置,是否在信号发送前进行了绑定
很快速的一通排查下来,发现都没有问题,觉得肯定是有细节被自己忽略了,然后重新静下心来重新走读一下代码,突然发现将对象moveToThread后,然后一通信号绑定处理完,居然忘记启动线程了(为自己的粗心,想哭一下),然后在绑定信号后启动线程,重新编译,一切运行ok