c++ - Qt对象删除但信号未断开

标签 c++ qt

在此topic它告诉当一个 qobject 删除它的事件连接将被删除。我有一个像下面这样的案例:

Work* work = new Work();//->Work derived from QObject 
Worker* worker  = new Worker(work);//->Worker derived from QThread and has the ownership of work

connect(work, SIGNAL(percentageComplete(int)), progressDialog, SLOT(setValue(int)));
connect(worker, SIGNAL(finished()),  worker, SLOT(deleteLater()));

progressDialog->show();
worker->start();

在 worker 的析构函数中我有:

Worker::~Worker(void){
    if(work != nullptr){
        work->deleteLater();
    }
}

我 %100 确定作品已被删除。我可以用断点看到它。我什至可以看到 QObjects descstructor 调用。

但是有些已删除的工作对象仍然收到“完成百分比”信号。又因为被删除,造成暗恋。

请问为什么删除对象后信号没有断开?

Worker的析构函数中的第二个问题 work->deleteLater(); 或者 delete work; 是否正确?

最佳答案

你为什么不使用disconnect()断开所有连接的插槽/信号? 您可以在析构函数中调用此函数。 Here你有类似主题的解决方案

关于c++ - Qt对象删除但信号未断开,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35037088/

相关文章:

c# - 将 C++ 类编码(marshal)到 C#

c++ - 在 windbg 中查找 STL 双端队列的元素计数

c++ - 在三角形库中指定孔

c++ - 复制构造函数或赋值运算符或两者,这里调用哪个?

c++ - 如何防止调整自定义 QWidget 的大小?

qt - 在 QGraphicsView 的 ScrollHandDrag 模式下,如何停止 QGraphicsItems 在场景中的移动?

c++ - LNK2019 在QtCreator中使用WinMain时

qt - 我怎样才能获得 DragArea 的放置效果,以便朝着接收它的 DropArea 设置动画?

qt - 使用 qsqlquery 删除

c++ - 将 Q_DECLARE_METATYPE 与可能被多次加载的 DLL 一起使用