qt 子线程之间交互数据
时间: 2024-02-21 10:19:46 浏览: 88
在 Qt 中,子线程之间可以通过信号和槽(signals and slots)来交互数据。下面是一个示例代码,演示了两个子线程之间的数据交互:
```cpp
#include <QThread>
#include <QDebug>
// 第一个子线程
class WorkerThread1 : public QThread
{
Q_OBJECT
public:
void run() override
{
qDebug() << "WorkerThread1 开始运行";
// 模拟耗时操作
sleep(2);
// 发送信号给第二个子线程
emit dataReady("Hello from WorkerThread1");
qDebug() << "WorkerThread1 运行结束";
}
signals:
void dataReady(const QString& data);
};
// 第二个子线程
class WorkerThread2 : public QThread
{
Q_OBJECT
public slots:
void handleData(const QString& data)
{
qDebug() << "WorkerThread2 收到数据:" << data;
}
};
int main(int argc, char *argv[])
{
QCoreApplication a(argc, argv);
WorkerThread1 workerThread1;
WorkerThread2 workerThread2;
// 连接信号和槽
QObject::connect(&workerThread1, &WorkerThread1::dataReady, &workerThread2, &WorkerThread2::handleData);
// 启动两个子线程
workerThread1.start();
workerThread2.start();
return a.exec();
}
#include "main.moc"
```
在上面的示例中,`WorkerThread1` 是第一个子线程,它在 `run` 函数中执行一些耗时操作,并通过信号 `dataReady` 发送数据给第二个子线程。`WorkerThread2` 是第二个子线程,它定义了一个槽函数 `handleData` 来处理接收到的数据。
在 `main` 函数中,我们创建了两个子线程的实例 `workerThread1` 和 `workerThread2`,然后使用 `QObject::connect` 函数将第一个子线程的信号 `dataReady` 连接到第二个子线程的槽函数 `handleData`。这样,当第一个子线程发送数据时,第二个子线程会接收到并处理。
运行代码后,你将看到输出中显示第二个子线程收到了来自第一个子线程的数据。这就是两个子线程之间的数据交互。请注意,为了使信号和槽能够工作,需要在类定义前加上 `Q_OBJECT` 宏,并在文件末尾添加 `#include "main.moc"` 来启用 Qt 的元对象编译器(MOC)。
阅读全文