标签:一模一样 params turn 必须 启动 qwidget parent ram 成员变量
只添加了部分代码,运行这个程序是看不到打印信息的,说明这个信号没有接收到,如果将connect最后一个参数改成直接连接,会有打印,但是主界面会卡住5秒。一直被这个问题困扰,为什么g_pThread 收不到信号呢,首先应该知道,Qt的信号和槽是基于事件循环的,就像main函数最后都会有一句 return exec();这里就启动了事件循环,除了信号触发线程与接收者线程相同的情况能直接调用到slot,其它情况都依赖事件机制。QThread::run()实际上是简单调用了QThread::exec(),而它启动了线程的事件循环,但是run()函数结束后,事件循环结束了,这个时候我们再发送信号,没有事件循环的支持,g_pThread就收不到信号了。
QThread的内部结构非常有趣:
QObject必须始终和parent在同一个线程。
所以解决上面代码收不到信号的问题其实很简单,在线程的run();函数中添加一个事件循环就可以了,即加入一句exec();
有不对的地方希望大家指正,相互学习。
https://blog.csdn.net/sddsighhz/article/details/36894247
成都-陈剑客
信号槽不就是一个回调函数嘛
他啥也不依赖
你可以这么干
取得函数地址
然后把这个地址设置到emit的地方
效果和信号槽一模一样
标签:一模一样 params turn 必须 启动 qwidget parent ram 成员变量
原文地址:https://www.cnblogs.com/findumars/p/9550910.html