Qt 中的 destroyed 信号
在 Qt 中,每个 QObject 对象都有一个 destroyed 信号。当对象被销毁时,会自动发出该信号,用于通知相关对象进行相应处理。
示例
QObject *myObject = new QObject();
// 手动连接 destroyed 信号
QObject::connect(myObject, &QObject::destroyed, []() {
qDebug() << "Object destroyed";
});
// 销毁对象
delete myObject;
在上述代码中,我们创建了一个 QObject 对象,并手动连接了它的 destroyed 信号。当我们调用 delete 来销毁该对象时,destroyed 信号将被发出,并且与该对象相关的所有连接都会被自动断开。
使用场景
- 资源清理
当对象被销毁时,可以通过连接 destroyed 信号来执行一些资源清理操作。例如,关闭文件、释放内存等。
示例:
class MyClass : public QObject {
Q_OBJECT
public:
MyClass() {
connect(this, &QObject::destroyed, this, &MyClass::cleanup);
}
private slots:
void cleanup() {
// 执行清理操作
qDebug() << "Cleaning up resources";
}
};
- 防止无效引用
通过捕获 destroyed 信号,可以防止对已删除对象的无效引用。这在复杂的对象关系中尤为重要。
示例:
class Parent : public QObject {
Q_OBJECT
public:
Parent() {
child = new Child(this);
connect(child, &QObject::destroyed, this, &Parent::onChildDestroyed);
}
private slots:
void onChildDestroyed() {
child = nullptr;
qDebug() << "Child object destroyed";
}
private:
Child *child;
};
通过这些示例,可以看出 destroyed 信号在 Qt 中的重要性和广泛应用。