在Qt中,跨線程訪問對象的方法有兩種:信號槽機制和事件隊列。
示例代碼:
class MyObject : public QObject
{
Q_OBJECT
signals:
void mySignal();
public slots:
void mySlot()
{
// 槽函數
}
};
// 在另一個線程中連接信號和槽
QThread* thread = new QThread;
MyObject* object = new MyObject;
object->moveToThread(thread);
QObject::connect(object, SIGNAL(mySignal()), object, SLOT(mySlot()));
thread->start();
// 在另一個線程中發射信號
emit object->mySignal();
示例代碼:
class MyObject : public QObject
{
Q_OBJECT
public slots:
void mySlot()
{
// 槽函數
}
};
// 在另一個線程中訪問對象的方法
MyObject* object = new MyObject;
QMetaObject::invokeMethod(object, "mySlot");
需要注意的是,使用事件隊列時,被調用的方法必須是一個槽函數,而且對象必須在目標線程中創建。