執行方法時,我有以下的代碼使用QMetaObject :: invokeMethod中:爲什麼從線程
class A : public QObject
{
Q_OBJECT
public:
A() : QObject()
{
moveToThread(&t);
t.start();
}
~A()
{
t.quit();
t.wait();
}
void doSomething()
{
QMetaObject::invokeMethod(this,"doSomethingSlot");
}
public slots:
void doSomethingSlot()
{
//do something
emit ready();
}
signals:
void ready();
private:
QThread t;
}
從doSomething
爲什麼它必須通過QMetaObject::invokeMethod
被調用的問題。我知道有一些連接類型。 有人可以解釋一下底下是什麼?
ecatmur給你完美的答案。你有另一個問題,讓線程作爲移動到該線程的對象的成員是非常糟糕的主意,在銷燬期間(使用deleteLater時),你可能會遇到奇怪的問題。 –
有關完整的說明,請閱讀[本文檔](http://doc.qt.digia.com/4.2/threads.html#per-thread-event-loop) –
@MarekR:有什麼問題?我已經從http://stackoverflow.com/questions/13878745/correct-way-of-threading-in-qt – krzych