从线程发出信号

时间:2010-06-17 07:00:08

标签: qt multithreading

我正在编写一个使用线程进行后台处理的示例。

在线程中我试图发出信号。但它没有进入插槽。

连接时我检查了“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;
};

1 个答案:

答案 0 :(得分:0)

你真的不应该这样做。你的MyThread对象存在于主线程中,因此它的信号应该从主线程中发出。 我不确定这样的调用究竟会发生什么,但我怀疑连接类型将是Qt :: DirectConnection(因为MyThread和test都存在于主线程中),并且你的插槽将直接在run方法中调用,所以不在主线程中(我假设,你想要的是什么)。

如果你想从另一个线程发射,你需要在MyThread :: run中创建一些QObject后代,并使用它来发出信号。

如果qt发现你的意思是排队连接,那么它也应该有效,如果你在主线程中有事件循环工作(对吗?)。