是否可以为QObject的父级使用共享指针

Is It Possible to Use a Shared Pointer for the Parent of a QObject?

本文关键字:共享 指针 QObject 是否      更新时间:2023-10-16

我有一个启动类,它在构造中设置一个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中的值,但这将是漫长而冗长的。

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

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

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

我想传递SystemController的内存位置的原因,控制器类具有已经在该类中设置的重要数据,我希望在不需要运行所有初始化的情况下访问方法。

为什么不将SystemController settings的概念分离到另一个POD类\结构中呢。然后你可以有

class SystemController : public QObject, public SystemSettings

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

并根据您的意愿随意设置。

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