解决 QObject: Cannot create children for a parent that is in a different thread.

1. 错误 QObject: Cannot create children for a parent that is in a different thread.

一般出现这样的错误是在 Qt 中使用多线程,并且尝试使用 connect 连接不同或同一对象的信号与槽函数而出现这样的问题。

究其原因是因为 Qt 的每个对象都会有一个归属,产生这样的错误通过报错信息可以看得出,绑定的两个对象并非工作在同一线程里而导致(线程 ID 不同),即两个对象的所属不同。

2. 解决方案

笔者的原本的报错代码中,是在线程类里面绑定父对象与当前对象的槽函数才导致出现这样的问题,即使临时解决的该问题,还会出现发送信号后槽函数不执行的情况。

那么笔者另辟蹊径的并非完全采用网上各路大神给出的方案,而是
<1> 在父对象创建线程类后,直接在父对象中完成 connect 绑定信号与槽函数;
<2> 在线程类的构造函数中添加代码 this->moveToThread(this); 改变当前线程的所属;
<3> 并且在线程类重写的 run() 中添加代码 this->exec();(一般添加在所有操作之后,循环等待之前)
[注]:this->exec() 的作用是循环消息事件的机制,因此添加之后槽函数便可正常的触发。

此番操作之后,你的 Qt Creator 便不会再报错,并且信号与槽函数可以正常的触发。

猜你喜欢

转载自blog.csdn.net/qq_36393978/article/details/128338447