是否可以将共享指针用于QObject的父级?

时间:2014-09-29 07:59:22

标签: c++ qt qobject

我有一个启动类,它在构造中设置SystemController

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中的值,但这会很长且冗长

有什么想法吗?如果您需要更多信息,请询问。

2 个答案:

答案 0 :(得分:0)

您可以将SystemController塑造为Singleton并将QMutex警卫设置为访问并发线程中使用的SystemController's个私有数据。

答案 1 :(得分:0)

  

是否可以将共享指针用于QObject的父级?

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

  

我想传递SystemController的内存位置的原因,   是Controller类已经在类中设置了重要数据,   我想访问它而不必运行我的所有初始化   其中的方法。

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

class SystemController : public QObject, public SystemSettings

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

}

并根据需要使用设置。