【发布时间】:2014-09-29 07:59:22
【问题描述】:
我有一个这样的启动类,它在构造中设置了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 中的值,但这会很长而且很冗长。
有什么想法吗?如果您需要更多信息,请询问。
【问题讨论】:
-
不要使用单例。 99.9% 的情况下是个坏主意。
-
@UmNyobe - 有什么想法吗?
-
I've recently though wanted to use this class in a threaded class, which doesn't like me passing me the SystemController as the threaded class doesn't have a parent这行好难懂 -
DataTestWorkerclass 没有父级。如果我将SystemController传递给它,编译器会抱怨我无法将SystemController的地址传递给它,因为DataTestWorker没有父级。如果我在DataTestWorker中创建SystemController的新实例,它会起作用,但这违背了我想要做的事情的目的。清楚吗? -
那么你会怎么做 - 如果你只想要一个
Settings类的实例和一个SystemController的实例?我目前正在阅读有关共享指针的信息 - 但我不确定这是否是正确的方向。