社区
Qt
帖子详情
槽函数不响应信号问题
zhenimei100
2017-09-01 05:02:41
qt4,一个继承自qthread类里面定义一个void信号。然后connect到一个全局变量(类)的槽函数。 当这个线程释放该信号的时候,全局变量的槽函数没有执行。但是奇葩的是,我还有一个继承自qthread的类,也是释放信号给这个全局变量的槽函数,却得到执行了。这两个线程基本一样,没多大区别。
我整个人都不好了。
有人可以告诉我,信号和槽,在使用过程中要注意什么吗?
...全文
1661
9
打赏
收藏
槽函数不响应信号问题
qt4,一个继承自qthread类里面定义一个void信号。然后connect到一个全局变量(类)的槽函数。 当这个线程释放该信号的时候,全局变量的槽函数没有执行。但是奇葩的是,我还有一个继承自qthread的类,也是释放信号给这个全局变量的槽函数,却得到执行了。这两个线程基本一样,没多大区别。 我整个人都不好了。 有人可以告诉我,信号和槽,在使用过程中要注意什么吗?
复制链接
扫一扫
分享
转发到动态
举报
AI
作业
写回复
配置赞助广告
用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::QueuedConnection`类型的
信号
槽
连接,这将确保
槽
函数
在接收
信号
的线程上下文中执行,防止数据竞争和线程安全
问题
。 总结一下,QT多线程解决方案的核心是将耗时任务移到工作线程中执行,同时...
Qt 一去丶二三里 Blog(二)
当一个对象的状态发生变化时,可以触发一个
信号
,其他对象可以通过连接这个
信号
来执行相应的
槽
函数
。这种设计模式避免了硬编码的回调
函数
,使得代码更加灵活和可维护。 在多线程编程中,Qt提供了QThread类来支持...
Qt 一去丶二三里 Blog(一)
信号
和
槽
允许对象之间进行通信,当特定事件发生时,
信号
会被触发,然后调用与之连接的
槽
函数
,实现
响应
。 接下来,我们可能会接触到Qt的窗口和控件。QWindow是所有窗口类的基类,而QWidget是构建用户界面的基本组件...
qedit.h头文件
5. 连接
信号
和
槽
:利用Qt的
信号
和
槽
机制,
响应
用户的操作,例如连接`textChanged()`
信号
到处理
函数
,当文本改变时执行特定操作。 需要注意的是,`qedit.h`头文件的使用需要Qt库的支持,因此在项目配置阶段需确保已...
Qt 入门中文资料 Qt从入门到精通
信号
在特定事件发生时自动发送,
槽
则是接收
信号
并执行相应操作的
函数
。 **输入输出设备**:Qt提供了丰富的I/O类,支持文件读写、网络通信、数据库访问等功能,简化了数据处理流程。 #### 二、Qt学习之路 对于初学...
Qt
16,818
社区成员
26,684
社区内容
发帖
与我相关
我的任务
Qt
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
复制链接
扫一扫
分享
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
加入社区
获取链接或二维码
近7日
近30日
至今
加载中
查看更多榜单
社区公告
暂无公告
试试用AI创作助手写篇文章吧
+ 用AI写文章