Вы можете добавить более одного аргумента в этот сигнал

ументации Qt говорится, что сигналы и слоты могут бытьdirect, queued а такжеauto.

В нем также указывалось, что если объект, которому принадлежит слот, «живет» в потоке, отличном от объекта, которому принадлежит сигнал, отправка такого сигнала будет аналогична отправке сообщения - сигнал emit будет возвращен немедленно, и метод слота будет вызван в цикле событий целевого потока.

К сожалению, в документации не указано, что означает «жизнь», и примеры отсутствуют. Я пробовал следующий код:

main.h:

class CThread1 : public QThread
{
Q_OBJECT
public:
    void run( void )
    {
        msleep( 200 );
        std::cout << "thread 1 started" << std::endl;
        MySignal();
        exec();
    }
signals:
    void MySignal( void );
};

class CThread2 : public QThread
{
Q_OBJECT
public:
    void run( void )
    {
        std::cout << "thread 2 started" << std::endl;
        exec();
    }
public slots:
    void MySlot( void )
    {
        std::cout << "slot called" << std::endl;
    }
};

main.cpp:

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    CThread1 oThread1;
    CThread2 oThread2;
    QObject::connect( & oThread1, SIGNAL( MySignal() ),
        & oThread2, SLOT( MySlot() ) );
    oThread1.start();
    oThread2.start();
    oThread1.wait();
    oThread2.wait();
    return a.exec();
}

Выход:

thread 2 started
thread 1 started

MySlot() никогда не называется :(. Что я делаю не так?

Ответы на вопрос(3)

Ваш ответ на вопрос