是否有可能为QObject的父级使用共享指针?

问题描述:

我有一个启动类因此它设置在构建物的SystemController是否有可能为QObject的父级使用共享指针?

m_systemController(new SystemController(this, 
               Provider::getSettingsAsSingleton())), 

本质上讲,这满足:

public: 
     explicit SystemController(QObject *parent, 
            Settings& config); 

最近,我一直想,虽然在一个线程类使用这个类,它不喜欢我把SystemController作为线程类没有父项。我试着将它作为这样的:

public: 
explicit DataTestWorker(QObject *parent=0);//, 
           //SystemController &sysCtrl); //Obviously in my setup, it would complain about this 

DataTestWorker类其实螺纹类,在DataTest类初始化。我想要传递SystemController的内存位置的原因是,Controller类具有已在类中设置的重要数据,我希望在不必再次运行其中的所有初始化方法的情况下访问它。

有没有办法以某种方式传递某种“共享”指针 - 其中不仅有这个类 - 而且其他类可以访问它。我能想到的唯一方法是我可以使用DataTestDataTestWorker类之间的信号和插槽来操作SystemController中的值,但这会很长并且很冗长。

任何想法?如果您需要更多信息,只需询问。

+0

不使用单身人士。 99.9%的案例不妙。 – UmNyobe 2014-09-29 08:38:57

+0

@UmNyobe - 关于该怎么做的任何想法? – fiz 2014-09-29 08:39:38

+0

'我最近虽然想要在一个线程类中使用这个类,它不喜欢我将SystemController传递给我,因为这个线程类没有父类'这行很难理解 – UmNyobe 2014-09-29 08:40:58

是否可以使用共享指针作为QObject的父对象?

不。没有共享指针是QObject的子类。我不明白为什么它会有意义。

我想通过SystemController的内存位置的原因, 是控制器类有重要的数据已经在类设置, 我希望,而不必运行我所有的初始化内其 的方法来访问再次。

为什么不将SystemController settings的概念分隔到另一个POD类\ struct中。然后,你可以有

class SystemController : public QObject, public SystemSettings 

class SystemController : public QObject 
{ 
    SystemSettings m_settings; 
    SystemSettings systemSettings() {m_settings}; 

} 

,并根据需要随意修改设置。

+0

其实我想我刚刚意识到你的意思。你的意思是我应该创建一个SystemController设置类,它可以将变量保存在一个简单的POD中? – fiz 2014-09-29 09:10:07

+1

是的,一个类只是重新组合变量。没有信号。没有插槽。没有复杂的逻辑***。这个'SystemSettings'类可以由SystemController通过第二个设计选项在信号中发送。 – UmNyobe 2014-09-29 09:11:57

+0

@UmNyobe,我想你应该添加“SystemSettings类可以通过SystemController发送一个信号”到你的答案 – 2014-09-29 09:53:44

您可以将您的SystemController设置为Singleton并将QMutex保护设置访问SystemController's并发线程中使用的私有数据。

+0

我会再试一次,但我记得当我尝试它时,编译器抛出了一个错误,因为它在构造函数中使用了'Settings'单例。我会再给它一次。我只是好奇,看看有没有其他更好的方法 – fiz 2014-09-29 08:18:18