испустить сигнал из потока - PullRequest
0 голосов
/ 17 июня 2010

Я пишу пример, который использует поток, чтобы выполнить некоторую фоновую обработку.

В потоке я пытаюсь подать сигнал.Но оно не подходит к слоту.

При подключении я проверил значение функции «connect ()», оно возвращает значение как true.

Одна вещь, на которую стоит обратить внимание, находится в работеМетод Я не использую «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 голосов
/ 01 июля 2011

Вы действительно не должны этого делать.Ваш объект MyThread находится в основном потоке, и поэтому его сигналы должны излучаться из основного потока.Я не уверен, что именно произойдет с таким вызовом, но я подозреваю, что тип соединения будет Qt :: DirectConnection (так как MyThread и test живут в основном потоке), и ваш слот будет вызываться непосредственно в методе run, поэтомуне в главном потоке (что, я полагаю, то, что вы хотите).

Если вы хотите производить излучение из другого потока, вам нужно создать некоторый потомок QObject в MyThread :: run и использовать его для передачисигналы.

Если qt выяснил, что вы имеете в виду соединение с очередями, то оно также должно работать, если у вас есть цикл обработки событий в основном потоке (не так ли?).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...