Qt QObject Cannot create children for a parent that is in a different thread

Posted DreamLife.

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Qt QObject Cannot create children for a parent that is in a different thread相关的知识,希望对你有一定的参考价值。

Qt QObject Cannot create children for a parent that is in a different thread

文章目录


关键字: 关键字1关键字2关键字3关键字4关键字5

内容背景:

最近项目终于切到Linux下开发了,所以最近的记录都是发生在Debian 10 以及Arm Debain 10 下,Qt版本5.12.3。这几天真是问题多多,收获满满,不过目前阶段仅仅停留在解决问题,至于原理性的东西,还得慢慢消化。最近好多问题都是直接群里问大神,感谢各位大神助我成长。

摘要

今天在搞代码的时候,触发了新的不问题,也不是BUG,就是在控制台有红色的日志输出,红色,那应该就是比较重要的内容了,所以要重点照顾一下。报错内容如下

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

1 问题分析

这句这外国语言描述,就是无法为不同线程中的父级创建子级,说了个寂寞,结合代码来看你,其实就是我有一个线程,在线程里面用到一个变量吧,这个变量其实是在主线程中创建的,子线程中虽然可以使用,但是其实还是操作的主线程的对象。就是这个意思,结合代码,这个就是我自己写的一个音频类里面。我使用了movetoThread的方式,所以我在线程的构造函数里面创建了变量,但是你,在我线程构造函数调用的时候,其实线程还没有创建。所以就有了子线程调用主线的问题,就出现了这共色的内容。

2 解决问题

知道了问题在哪里,就很好解决,那就把变量放在线程里面分配资源就好, 如下,把它送构造函数移动到线程启动槽函数里面就可以


以上是关于Qt QObject Cannot create children for a parent that is in a different thread的主要内容,如果未能解决你的问题,请参考以下文章

QT 线程:Getting QObject::startTimer: timers cannot be started from another thread 警告

Qt笔记-解决QObject::startTimer: Timers cannot be started from another thread

解决qt程序运行时的cannot create Qt for Embedded Linux data directory: /tmp/qtembedded-0

Cannot create a win event notifier without a QEventDispatcherWin32问题解决个人整理

Qt入门教程QObject篇QObject类

Qt入门教程QObject篇QObject类