槽函数不响应信号问题

zhenimei100 2017-09-01 05:02:41
qt4,一个继承自qthread类里面定义一个void信号。然后connect到一个全局变量(类)的槽函数。 当这个线程释放该信号的时候,全局变量的槽函数没有执行。但是奇葩的是,我还有一个继承自qthread的类,也是释放信号给这个全局变量的槽函数,却得到执行了。这两个线程基本一样,没多大区别。
我整个人都不好了。
有人可以告诉我,信号和槽,在使用过程中要注意什么吗?
...全文
1598 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
fhqbgmqj 2017-10-26
  • 打赏
  • 举报
回复
我的问题解决了,楼主你检查下你在绑定信号槽的时候,触发信号的对象有没有实例化,绑定信号槽时,信号和槽的两方都必须实例化才行。
fhqbgmqj 2017-10-26
  • 打赏
  • 举报
回复
我也遇到了楼主同样的问题,我在主窗体中添加了信号槽,子窗体执行完毕触发信号,主窗体响应信号刷新界面,子窗体和主窗体生命周期一样,另外,我的信号和槽函数都没有参数。我调试跟踪了,信号也发出了,就是执行不到槽函数。不知道楼主解决了问题没有?
donwmufromdying 2017-09-05
  • 打赏
  • 举报
回复
这种问题非常容易查找问题: 你调试一下就能发现.这种情况一般是connect不成功.调试时你的应用程序输出会对连接不成功的connect报错. 连接不成功一般有几种原因:信号和槽函数参数不匹配; 自己写的信号和槽定义类没有加上Q_OBJECT; 忘记把moc_xxx.cpp给清除掉,导致错误连接.你最好的办法是单步执行到connect观察是否连接不成功.另外如果你的信号槽函数中间使用了自定义类型,并且信号槽是跨线程的,那么你要用qRegisterMetaType<ClassName>("ClassName")注册一下
zhenimei100 2017-09-05
  • 打赏
  • 举报
回复
总结: 我把connect函数写到了线程类的构造函数里,都得到了运行。然后把线程速度加快5ms执行一次,还是只有一个运行。我是测试不出什么问题了。 如果有人遇到和我一样的问题,记得来我帖子下留言啊。
zhenimei100 2017-09-05
  • 打赏
  • 举报
回复
谢谢大家的回复,看了你们的回答,我继续测试了下,现统一回复: 1、信号和槽函数都是void xxxx();这种形式的,即无输入也无返回。 2、connect都返回true 3、两个继承自qthread的线程,connect到同一个全局变量(类)的不同槽函数。 发出信号后一个槽函数得到执行,另一个无法执行。 4、我用的都是Qt::AutoConnection,其他我也试过,反正就是一个行一个不行。 5、关键最贱的地方是我写过简单测试程序,两个都得到执行了。 简直泪奔。。。。。。。。
懒懒的吉他手 2017-09-04
  • 打赏
  • 举报
回复
一,判断一下是不是真的发出信号了 二,信号和槽的参数类型是否一致
  • 打赏
  • 举报
回复
要把信号成功连接到槽, 1.信号的参数和槽的参数要有相同的顺序和类型 2.如果信号的参数比槽的参数多,则信号多出来的参数会被抛弃掉。如果参数类型不匹配或者信号或者槽不存在,Qt会在运行时发出警告。 你的情况是槽的参数比信号的参数多,这种情况应该连接不成功。可以尝试一下方式: 1.检查connect返回结果是不是成功 2.看运行时有没有发出信号和槽连接出问题的警告
zhenimei100 2017-09-04
  • 打赏
  • 举报
回复
我试了Qt::AutoConnection和Qt::BlockingQueuedConnection,都不行。
sailing0123 2017-09-02
  • 打赏
  • 举报
回复
提个建议,你仔细看看connect函数的末尾参数type的用法 QMetaObject::Connection QObject::connect(const QObject *sender, const char *signal, const QObject *receiver, const char *method, Qt::ConnectionType type = Qt::AutoConnection)

16,239

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧