qt 采用movetothread在应用程序gui关闭时如何正确退出。

cpp 复制代码
QObject::connect(myThread, &CMyThread::started, myWork, &QMyWork::onWorkStarted);
QObject::connect(myThread, &QThread::finished, myWork, &QObject::deleteLater);
QObject::connect(myThread, &QThread::finished, myThread, &QObject::deleteLater);
QObject::connect(ui->pushButton, &QPushButton::clicked, this, &MainWindowPrivate::startWork);
myWork->moveToThread(myThread);

采用上面的常用的代码:

采用DT指针模式时,在窗口的私有数据类的析构函数中执行:

cpp 复制代码
 d->myThread->quit();
 d->myThread->wait();

QMyWork对象实例myWork能正确析构,但myThread线程不能执行&QObject::deleteLater,线程不能自己删除自己,信号与槽断了。但在窗口的closeEvent()中执行上述代码就能正确析构了,线程能自己删除自己了。QT的源代码复杂,看不懂,不知是什么原因。

相关推荐
Charles_go1 天前
C#中级45、什么是组合优于继承
开发语言·c#
二川bro1 天前
数据可视化进阶:Python动态图表制作实战
开发语言·python·信息可视化
q***2511 天前
java进阶1——JVM
java·开发语言·jvm
while(1){yan}1 天前
线程的状态
java·开发语言·jvm
豐儀麟阁贵1 天前
8.3 Java常见的异常类
java·开发语言
lzh200409191 天前
【C++STL】List详解
开发语言·c++
q***44811 天前
Java进阶10 IO流
java·开发语言
luoyayun3611 天前
Qt/C++ 线程池TaskPool与 Worker 框架实践
c++·qt·线程池·taskpool
济宁雪人1 天前
Java安全基础——文件系统安全
java·开发语言·安全
Charles_go1 天前
C#中级46、什么是模拟
开发语言·oracle·c#