Nya*_*uko 10 c++ qt multithreading
假设我创建了一个QObject a,它有一个成员QObject b.(实际上,A和B都是QObject的子类,而A类是成员B. b)
当b被创建,其母公司为0(默认值).在代码中,如果我从未设置b父级a,并且如果我调用movetothread()移动a到工作线程,那么它也会b被移入该线程吗?
如果它没有被移动,如果我b.init()从工作线程(我移入的a那个)调用哪个使用new运算符来创建另一个b作为父节点的QObject ,那么我将得到以下错误,对吧?
QObject:无法为位于不同线程中的父级创建子级
正如 QObject::moveToThread 的 Qt 文档所述: -
更改该对象及其子对象的线程关联性。如果该对象有父对象,则无法移动该对象。事件处理将在 targetThread 中继续。
在这种情况下,父对象是一个对象,其子对象可以通过在构造函数中传递父对象或通过在子对象上调用 setParent 来设置。它不是一个具有指向另一个对象的指针的对象。
在代码中,如果我从未将 b 的父级设置为 a,并且如果我调用 movetothread() 将 a 移入工作线程,那么 b 也会移入该线程吗?
所以,不,如果 b 的父级未设置,并且您对“a”调用 moveToThread,“b”仍将具有原始线程关联性。
如果它没有移动,如果我从工作线程调用 b.init()...
如果您已将“a”而不是“b”移动到工作线程,那么您不应该直接从工作线程调用 b.init。相反,工作线程 ('a') 中的对象应该向原始线程中的对象发出信号,以从连接的槽调用 b.init