我在一个多线程Qt应用程序上工作,想要连接一个线程中的一个信号与另一个线程中的插槽。我的问题是,我只有用于在项目范围的常量文件中定义的信令线程中设置QObject:objectName的字符串。
我的总体目标是避免将指针传递到位于其他对象内部几层的对象。我以前也这样做过,虽然它可以工作,但它给代码增加了很多不必要的复杂性。对于这个问题,这是一个非常不优雅的解决方案。
我想要做的是对应用程序中的所有QObjects进行全局搜索,以找到与该名称匹配的名称。在阅读Qt文档时,有很多关于如何搜索子对象的讨论,或者您可以使用父类进行搜索。但对于不同线程中的对象,这似乎不起作用。特别是,因为执行连接的对象不能直接访问拥有执行信令的对象的QThread。
有什么建议吗?
发布于 2010-08-04 05:32:35
对象树必须都属于同一线程。QObject状态的详细描述:
使用moveToThread()函数更改对象及其子对象的线程亲和性(如果对象有父对象,则不能移动)。
我看到了在Qt Creator中实现的查找对象问题的一个有趣的解决方案:它的plugin manager has a global object registry,您可以在其中添加和删除对象,并在以后按类型查询它们。这将很容易扩展它,并允许按名称查询。只需记住,名称不必是唯一的。
发布于 2010-08-04 05:22:21
您可以编写自己的name=>object地图。Qt的容器类是线程安全的。
https://stackoverflow.com/questions/3400823
复制相似问题