我正在编写一个使用线程进行后台处理的示例。
在线程中我试图发出信号。但它没有进入插槽。
连接时我检查了“connect()”函数值的值,它返回值为true。
有一点需要注意的是在run方法中我没有使用“exec()”。
请帮我解决这个问题。
class MyThread : public QThread
{
Q_OBJECT
public:
void run( void )
{
while (true)
{
emit updateStatus();
}
}
signals:
void updateStatus();
};
class test: public QObject
{
Q_OBJECT
public :
void test
{
connect(&thread, SIGNAL(updateStatus()),this, SLOT(update()));
thread.start();
}
public slots:
void update()
{
//display
}
private:
MyThread thread;
};
答案 0 :(得分:0)
你真的不应该这样做。你的MyThread对象存在于主线程中,因此它的信号应该从主线程中发出。 我不确定这样的调用究竟会发生什么,但我怀疑连接类型将是Qt :: DirectConnection(因为MyThread和test都存在于主线程中),并且你的插槽将直接在run方法中调用,所以不在主线程中(我假设,你想要的是什么)。
如果你想从另一个线程发射,你需要在MyThread :: run中创建一些QObject后代,并使用它来发出信号。
如果qt发现你的意思是排队连接,那么它也应该有效,如果你在主线程中有事件循环工作(对吗?)。