在主线程下开启了一个子线程,子线程循环执行任务,当主线程给子线程发送信号时,无法触发子线程的信号槽。
子线程代码:
#include "childThread.h"
childThread::childThread()
{
//构造函数
}
hildThread::work()
{
while(true)
{
//do something
}
}
on_sigFromMain()
{
qDebug()<<"recv a signal from Main...";
}
//childThread.h
class childThread : public QObject
{
Q_OBJECT
public:
explicit childThread();
void work();
public slots:
void on_sigFromMain();
};
当主线程发送信号要触发on_sigFromMain()槽函数时,发现无法被触发。
这个时候只需要在子线程的work函数的while内加入
QCoreApplication::processEvents();
即可。修改后的代码如下:
#include "childThread.h"
childThread::childThread()
{
//构造函数
}
hildThread::work()
{
while(true)
{
//do something
QCoreApplication::processEvents();
}
}
on_sigFromMain()
{
qDebug()<<"recv a signal from Main...";
}
本文讨论了在Qt中主线程与子线程通信时遇到的问题,即主线程无法触发子线程的信号槽。通过分析,发现需要在子线程的循环里调用`QCoreApplication::processEvents()`来确保事件循环的运行,从而使得信号能够被正确接收并触发相应的槽函数。修复此问题后,子线程便能正常响应主线程的信号。
575

被折叠的 条评论
为什么被折叠?



