Qt主线程发送信号子线程触发槽函数,怎么建立连接
时间: 2024-03-21 20:38:11 浏览: 149
Qt不同类进行信号与槽建立,并传递参数
在Qt中,建立主线程和子线程的连接主要有以下步骤:
1. 定义一个信号和槽函数
```c++
signals:
void signalTest(); // 定义一个信号
public slots:
void slotTest(); // 定义一个槽函数
```
2. 在主线程中实例化一个子线程对象和一个QObject对象,并将QObject对象移动到子线程中
```c++
QThread* thread = new QThread; // 实例化一个子线程对象
QObject* obj = new QObject; // 实例化一个QObject对象
obj->moveToThread(thread); // 将QObject对象移动到子线程中
```
3. 在主线程中连接信号和槽函数
```c++
connect(this, SIGNAL(signalTest()), obj, SLOT(slotTest()));
```
4. 在子线程中启动事件循环
```c++
thread->start(); // 启动子线程事件循环
```
5. 在需要触发槽函数的地方发出信号,子线程中的槽函数就会被触发
```c++
emit signalTest(); // 发出信号,触发子线程中的槽函数
```
需要注意的是,在连接信号和槽函数时,由于子线程和主线程的信号槽连接并不是线程安全的,因此需要使用Qt提供的线程安全的队列`QMetaObject::invokeMethod()` 或者 `QMetaObject::invokeQueued()`来连接信号和槽函数。
阅读全文