Qt moveToThread:对象带来了什么资源
Qt moveToThread: What resources are brought with the object?
假设我创建了一个QObject a
,它有一个成员QObject b
。(实际上,A和B都是QObject的子类,类A有一个成员B b
。)
创建b
时,其父级为0(默认值)。在代码中,如果我从未将b
的父级设置为a
,并且如果我调用movetothread()
将a
移动到工作线程中,b
也会移动到该线程中吗?
如果它没有被移动,如果我从工作线程(我将a
移动到的线程)调用b.init()
,该线程使用新运算符创建另一个以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
b
也会被移到那个线程中吗?
不,QObject
不知道b
是a
的成员。(你没有说a
是持有指向b
的指针,还是直接持有b
,但在这两种情况下答案都是一样的。)
那么我会得到以下错误,对吗?
QObject
的子级必须始终在拥有父级的线程中创建。我不愿意说你肯定会犯错误,因为这种行为可能是不明确的。
请参见线程和QObject
。
- #定义c-预处理器常量..我做错了什么
- 努力将整数转换为链表。不知道我在这里做错了什么
- 当我尝试添加 2 个大字符串时,我无法弄清楚出了什么问题
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 当我们为(;;) 写作时,它做了什么?for 循环中的双分号有什么作用?
- 我的C++线程做错了什么?
- 此测试()中发生了什么意外过程?为什么总是覆盖 ch[0 1 2..]?
- "delete"在 C++ 中实际上做了什么?
- 这C++代码中发生了什么C++(指数函数)
- 谁能告诉我我用 getline 做错了什么 (cpp) 格式
- C++std::atomic在程序员级别保证了什么
- 没有输出的合并排序我做错了什么?
- 我正在尝试使用 while 循环从字符串中删除字母,直到没有字母。我在这里做错了什么?
- 在C++中使用 AKS 素数测试计算双胞胎素数 我做错了什么?
- 任何人都可以告诉我我的 C++ 代码出了什么问题?
- 哪种方式更快?究竟发生了什么,我们没有看到什么?
- 此递归中发生了什么?我需要仅使用递归/无循环来计算和备份
- C++:程序来找到一个数字的最大素因数,我的代码出了什么问题
- 试图用多态性来降视,出了什么问题?
- Clang定义了什么宏来宣布c++ 11模式(如果有的话)?