我正在研究多线程Qt应用程序,并希望将线程中的信号与另一个线程中的插槽连接。我的问题是我只有用于在项目范围的常量文件中定义的信令线程中设置QObject:objectName
的字符串。
我的总体目标是避免将指针传递给其他对象内部多层深的对象。我在过去做过这一点,虽然它有效,但它为代码增加了许多不必要的复杂性。对于这个问题,这是一个非常不优雅的解决方案。
我想要做的是对我的应用程序中的所有QObject进行全局搜索,以找到与名称匹配的QObject。在阅读Qt文档时,有很多关于如何搜索当前子对象的讨论,或者您可以使用父类进行搜索。但是对于不同线程中的对象,这似乎不起作用。特别是,由于进行连接的对象没有直接访问拥有执行信令的对象的QThread。
有什么建议吗?
答案 0 :(得分:1)
您可以编写自己的名称=>对象地图。 Qt的容器类是线程安全的。
答案 1 :(得分:1)
对象树必须都属于同一个线程。 QObject的详细描述说明:
使用moveToThread()函数更改对象及其子对象的线程关联(如果对象具有父对象,则无法移动该对象)。
我已经看到了一个有趣的解决方案,找到了在Qt Creator中实现的对象的问题:它的plugin manager has a global object registry,您可以在其中添加和删除对象,然后按类型查询它们。扩展它并允许按名称查询也很容易。记住名字不一定是唯一的。