我有一个启动类,它在构造中设置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类已经在类中设置了重要数据,我希望无需再次在其中运行所有初始化方法。
有没有办法以某种方式传递某种"共享"指针 - 不仅是这个类 - 而且其他类可以访问它。我可以想到的唯一方法是我可以使用DataTest
和DataTestWorker
类之间的信号和插槽来操纵SystemController
中的值,但这会很长且冗长
有什么想法吗?如果您需要更多信息,请询问。
答案 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};
}
并根据需要使用设置。