[Qt开发] QThread多线程踩坑记录。
i-info / / Dev | Qt开发 / 阅读量 3
时间少,为了防止以后忘记,先做简单记录。

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

如上错误信息。一般在执行QObject::moveToThread后的对象运行时发生。原因是:线程中有对象的创建与使用不在同一个线程。就比如说对象A的构造函数中new了一个对象B(A构造函数在主线程,所以B是在主线程创建的),但是在把对象A移动到一个新线程后,再使用对象A中的对象B就会出现上述错误信息。总结:new和使用必须在同个线程 因此还有一种出现情况:移动到新线程后的对象,应该使用信号/槽通讯,不应该直接调用槽函数,比如A->func()。因为,直接调用槽函数会在该线程运行函数,而非对象A所在的线程。如果A.func()中存在在A线程new的对象B(出现new B与使用B不在同个线程),根据上面的结论,提示出错。 如果弄不清楚线程的情况,可以使用qDebug()<<QThread::currentThreadId();(header:<QDebug>)来查看。

支付宝捐赠
请使用支付宝扫一扫进行捐赠
微信捐赠
请使用微信扫一扫进行赞赏
有 0 篇文章