dan yöntemi yürütürken QMetaObject :: invokeMethod kullanarak Neden:kod var aşağıdaki iplik
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;
}
o QMetaObject::invokeMethod
aracılığıyla çağrı edilmelidir neden doSomething
gelen bir soru. Bağlantı tipi olan bir şey olduğunu biliyorum. Birisi kaputun altında ne olduğunu açıklayabilir mi? Bir Qt::ConnectionType
belirtilmemiş gibi
ecatmur size mükemmel bir cevap verdi. Başka bir probleminiz var, bu iş parçacığına taşınan nesnenin bir üyesi olarak iş parçacığı olması, imha sırasında (deleteLater kullanırken) çok tuhaf sorunlar olabilir. –
Tam açıklama için [bu belge] okuyun (http://doc.qt.digia.com/4.2/threads.html#per-thread-event-loop) –
@MarekR: Hangi problemler? Bu çözümü http://stackoverflow.com/questions/13878745/correct-way-of-threading-in-qt – krzych