Qt emit发送信号,在其他非qt的C++ 类中接收
时间: 2024-10-16 21:15:52 浏览: 62
Qt静态函数发送信号
Qt中的`emit`关键字用于在一个槽函数(slot)中触发一个预定义的信号(signal)。当你有一个Qt类发出信号时,其他不是Qt的一部分,而是自定义的C++类想要接收到这个信号,你需要通过以下步骤:
1. **声明信号**:
在Qt类中,先声明信号,如`QObject::signals() {}` 或者 `Q_OBJECT`宏会自动包含所有相关的信号声明。然后,定义你的信号,例如:
```cpp
class MyQtClass : public QObject {
Q_OBJECT
public slots:
void mySignal(int data);
};
void MyQtClass::mySignal(int data) {
emit myCustomSignal(data);
}
```
这里`myCustomSignal`是你自定义的信号。
2. **连接信号到槽**:
在你的非Qt类中,需要创建一个成员变量指向Qt类的实例,并手动连接信号。这通常在构造函数中完成:
```cpp
class MyClass {
private:
MyQtClass* qtInstance;
public:
MyClass(QObject *parent = nullptr) : qtInstance(new MyQtClass(parent)) {
connect(qtInstance, &MyQtClass::myCustomSignal, this, [this](int data) {
// 当信号被发射时,这里会执行你的处理代码
handleData(data);
});
}
void handleData(int data) {
// 接收并处理信号数据
}
};
```
3. **注意生命周期管理**:
确保你在不再需要Qt类实例时,释放它,以免内存泄漏。可以使用智能指针(如QPointer)来管理。
阅读全文