2014-09-29 83 views
0

我有一個啓動類因此它設置在構建物的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

回答

0

是否可以使用共享指針作爲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

0

您可以將您的SystemController設置爲Singleton並將QMutex保護設置訪問SystemController's併發線程中使用的私有數據。

+0

我會再試一次,但我記得當我嘗試它時,編譯器拋出了一個錯誤,因爲它在構造函數中使用了'Settings'單例。我會再給它一次。我只是好奇,看看有沒有其他更好的方法 – fiz 2014-09-29 08:18:18

相關問題