• 2000阅读
  • 7回复

[提问]QT多线程信号槽无作用 [复制链接]

上一主题 下一主题
离线alban.wang
 

只看楼主 倒序阅读 楼主  发表于: 2020-08-18
test.rar (6 K) 下载次数:2


离线alban.wang

只看该作者 1楼 发表于: 2020-08-18
新手感觉要被QT的信号槽搞死
离线suzhuorui

只看该作者 2楼 发表于: 2020-08-19
看上去好像没什么问题,要不你把QThread对象换成指针?然后connect的第五个参数可以先不加试试看
离线alban.wang

只看该作者 3楼 发表于: 2020-08-19
回 suzhuorui 的帖子
suzhuorui:看上去好像没什么问题,要不你把QThread对象换成指针?然后connect的第五个参数可以先不加试试看 (2020-08-19 08:55) 

我有上传工程代码,有时间帮忙看一下呢
离线alban.wang

只看该作者 4楼 发表于: 2020-08-19
回 alban.wang 的帖子
alban.wang:我有上传工程代码,有时间帮忙看一下呢 (2020-08-19 10:30) 

想不明白为什么要改成指针,但是修改了一下也是不能触发的
离线suzhuorui

只看该作者 5楼 发表于: 2020-08-20
我看了一下代码,觉得你是想要实现点击按钮来控制线程中事务的开启与关闭,也不知道你是不是要搞这个。首先说一下信号接收不到的原因,在start线程后,运行run函数,但是run函数中存在while死循环,所以控制权一直在run函数中,没有出去,所以接收不到主界面给的信号,你把while去掉后再看看,其实是可以收到信号的。也不知道我说的对不对,反正我是这么理解的。至于你要的功能,我贴出来你看看,反正我是用定时器搞得。
离线alban.wang

只看该作者 6楼 发表于: 2020-08-21
suzhuorui:
我看了一下代码,觉得你是想要实现点击按钮来控制线程中事务的开启与关闭,也不知道你是不是要搞这个。首先说一下信号接收不到的原因,在start线程后,运行run函数,但是run函数中存在while死循环,所以控制权一直在run函数中,没有出去,所以接收不到主界面给的信号,你把while去掉后再看看,其实是可以收到信号的。也不知道我说的对不对,反正我是这么理解的。至于你要的功能,我贴出来你看看,反正我是用定时器搞得。[图片]

信号槽的原理还不太明白,但是原因就是这个问题导致的,从这个出发点,我换一个延时函数,也能发送信号槽了

离线flywindytc

只看该作者 7楼 发表于: 2020-11-26
线程运行时,只有run函数中的代码可以被运行,而该段代码又是一个死循环,没有事件处理机制,因此,其他对象在发送与该线程相关的信号时,是无法响应的,五楼,六楼的说法基本正确。
实际上不需要五楼六楼说的那么复杂,直接在run函数的循环体中加上
QCoreApplication::processEvents();就可以了,这样在run函数的循环体中也可以处理来自外部的事件(因为是跨线程,那么其他线程的对象发送而来的信号,就会被封装成事件交到该线程对象的事件队列里)
快速回复
限100 字节
 
上一个 下一个