В моем приложении есть основной поток и рабочий поток (QThread). 
Из основного потока я хотел бы вызвать метод моего рабочего потока и запустить его в контексте потока.
Я попытался использовать QMetaObject::invokeMethod и дать ему параметр QueuedConnection, но он не работает. 
Я также пробовал испускать сигналы из основного потока (который подключен к слоту рабочего потока), но это также не удалось.
Вот фрагмент примерно того, что я пробовал:
class Worker : public QThread
{
    Q_OBJECT
public:
    Worker() { }
    void run() 
    { 
        qDebug() << "new thread id " << QThread::currentThreadId(); 
        exec(); 
    }
public slots:
    void doWork()
    {
        qDebug() << "executing thread id - " << QThread::currentThreadId();
    }
};
Использование способа QMetaObject:
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "main thread id - " << QThread::currentThreadId();
    Worker worker;
    worker.start();
    QMetaObject::invokeMethod(&worker, "doWork", Qt::QueuedConnection);
    return a.exec();
}
Использование пути сигнала:
class Dummy : public QObject
{
    Q_OBJECT
public:
    Dummy() { }
public slots:
    void askWork() { emit work(); }
signals:
    void work();
};
int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);
    qDebug() << "main thread id - " << QThread::currentThreadId();
    Worker worker;
    worker.start();
    Dummy dummy;
    QObject::connect(&dummy, SIGNAL(work()), &worker, SLOT(doWork()), Qt::QueuedConnection);
    QTimer::singleShot(1000, &dummy, SLOT(askWork()));
    return a.exec();
}
Оба способа приводят к тому, что идентификатор основного потока печатается в QThread doWork.
Кроме того, я думал о внедрении простого производителя-потребителя, но если это работает, есть ли причина, почему бы не сделать это таким образом?
