qt线程间传递数据(非信号槽)
时间: 2023-06-28 21:12:03 浏览: 109
qt线程共享数据 信号和槽方式
线程间传递数据可以使用Qt提供的跨线程通信机制,但是非信号槽方式比较麻烦。下面介绍一种简单的方式:
1. 定义一个数据结构,用于传递数据,例如:
```cpp
struct MyData {
QString str;
int num;
};
```
2. 在目标线程中,定义一个接收数据的槽函数,例如:
```cpp
class MyThread : public QThread {
Q_OBJECT
public slots:
void onDataReceived(const MyData& data) {
// 处理接收到的数据
}
};
```
3. 在发送线程中,使用`QMetaObject::invokeMethod()`方法调用目标槽函数,例如:
```cpp
MyData data;
data.str = "Hello";
data.num = 123;
QMetaObject::invokeMethod(target, "onDataReceived", Qt::QueuedConnection,
Q_ARG(const MyData&, data));
```
其中,`target`是目标线程的QObject对象指针。
注意,这种方式虽然可以传递任意类型的数据,但是需要保证数据结构的定义在发送线程和接收线程中是一致的。此外,使用`QMetaObject::invokeMethod()`方法调用槽函数时,需要使用`Qt::QueuedConnection`连接方式,以确保跨线程调用。
阅读全文