在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");
需要注意的是,使用事件队列时,被调用的方法必须是一个槽函数,而且对象必须在目标线程中创建。