社区
Qt
帖子详情
槽函数不响应信号问题
zhenimei100
2017-09-01 05:02:41
qt4,一个继承自qthread类里面定义一个void信号。然后connect到一个全局变量(类)的槽函数。 当这个线程释放该信号的时候,全局变量的槽函数没有执行。但是奇葩的是,我还有一个继承自qthread的类,也是释放信号给这个全局变量的槽函数,却得到执行了。这两个线程基本一样,没多大区别。
我整个人都不好了。
有人可以告诉我,信号和槽,在使用过程中要注意什么吗?
...全文
1598
9
打赏
收藏
槽函数不响应信号问题
qt4,一个继承自qthread类里面定义一个void信号。然后connect到一个全局变量(类)的槽函数。 当这个线程释放该信号的时候,全局变量的槽函数没有执行。但是奇葩的是,我还有一个继承自qthread的类,也是释放信号给这个全局变量的槽函数,却得到执行了。这两个线程基本一样,没多大区别。 我整个人都不好了。 有人可以告诉我,信号和槽,在使用过程中要注意什么吗?
复制链接
扫一扫
分享
转发到动态
举报
写回复
配置赞助广告
用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
打赏
举报
回复
一,判断一下是不是真的发出信号了 二,信号和槽的参数类型是否一致
军神关云长_大凡
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)
Qt
信号
槽
连接失败或
槽
函数
不
响应
的
问题
总结
Qt
信号
槽
连接失败或
槽
函数
不
响应
的
问题
总结
Qt跨线程
信号
槽
槽
函数
无
响应
(未调用)
问题
最近在开发中遇到一个很奇怪的
问题
,
槽
函数
与
信号
连接后,在代码执行中发出
信号
,
槽
函数
始终进不去。一开始认为是connect调用传参不对,打了下返回值是true,而且在输出中也没有相关warnning输出。再一看跨线程
信号
槽
调用,所以猜测跟多线程有关。排查过程中各种换
信号
、改参数都没有效果,偶然间把接收对象的创建移至主线程,
槽
函数
居然执行成功了。本着有
问题
看手册的原则,在手册中找到了如下的说明: 大体意识是说:Qobject对象是有线程归属的,或者说其存活在特定线程中。当接收到队列连接的信或 投递的事件,
槽
Qt 子窗口上控件的
槽
函数
不
响应
遇到的
问题
:父窗口控件的
槽
函数
正常
响应
,子窗口控件的
槽
函数
无
响应
,想要实现的界面如下: 其中子窗口是嵌在父窗口的widget中的。点击pushButton1时,该按钮的
槽
函数
正常
响应
;点击pushbutton2,按钮的
槽
函数
没有正常
响应
。 解决方法:原来子界面中按钮的
槽
函数
是在Qt designer中通过右击转到clicked()的方式来实现的,需要改成用connect手动绑定
信号
和
槽
函数
,形如:
Qt
信号
槽
函数
没有
响应
问题
我自己写的
信号
槽
函数
,
信号
函数
在read线程,
槽
函数
在主线程。
函数
的参数类型是uint16_t。通过如下方式连接
信号
槽
,发现
信号
函数
被调用后
槽
函数
无法
响应
。尝试调用别的
信号
槽
函数
(参数为int类型),发现调用ok。unsigned short参数ok,使用uint16_t无法
响应
,所以应该是uint16_t参数类型
问题
,尝试注册uint16_t到qt,修改之后
信号
槽
函数
响应
ok。搜了网上资料,可能是
槽
函数
操作耗时,可以设置连接类型为Qt::BlockingQueuedConnection。
qt多线程编程,
信号
绑定成功,
槽
函数
不
响应
问题
排查处理及总结
隔了一段没写qt4程序,突然要在qt4下开发个小工具,用到了多线程处理,使用了
信号
出发处理,哔哩啪啦的快速敲完了代码,信心满满的去编译,顺利通过,然后运行,正常跑起来了。然而在点击按钮触发
信号
后,发现居然没有
响应
?根据以往经验,把常见的
槽
函数
没有
响应
的都排查了一遍,后,然后一通
信号
绑定处理完,居然忘记启动线程了(为自己的粗心,想哭一下),然后在绑定
信号
后启动线程,重新编译,一切运行。很快速的一通排查下来,发现都没有
问题
,觉得肯定是有细节被自己忽略了,然后重新静下心来重新走读一下代码,突然发现将对象。
Qt
16,239
社区成员
26,650
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章