2014-03-18 146 views
0

使用MVC,我有幾個視圖類,所有這些類都需要寫入事件日誌。事件日誌包含一個名爲addEntry的插槽,它將數據寫入日誌。我正在努力如何實現這些信號。我不希望將事件日誌對象傳遞給每個類。所以我...Qt中的信號共享架構

1)每一類中創建本地信號,並讓我的主窗口連接它們呢? 2)我可以使插槽靜態,以便所有視圖都可以訪問它而不需要事件日誌對象嗎? 3)創建一個信號並將其作爲函數指針傳入每個類,以便它們都可以使用相同的信號? 4)別的東西?

謝謝。

+0

我不確定你的意思是#2。你可以在基類中放置一個信號或屬性,所有派生類都會擁有它。 「靜態」信號不起作用。它需要有一個實例化的對象來接收信號。 – Jay

+0

目前我的觀點並非都來自同一個基類,但也許這是我應該考慮的。 – kkeogh

回答

0
  1. 在這個大多數,見下文。
  2. 編號插槽have to be associated with class instances
  3. 我懷疑moc會理解這一點,而且似乎 不必要的複雜。
  4. 原則上,您可以讓事件 向上傳播父級/子級別,並讓主窗口編輯日誌,但這也太複雜。

假設您的視圖類繼承自QAbstractItemView,那麼他們已經有了可以使用的信號,特別是如果您使用Q * Widget便利類。在你的情況下,如果這對我不起作用,我會做1)。你也可以考慮從模型類發出信號 - 畢竟這是更新實際發生的地方。

+0

我會堅持#1。謝謝。 – kkeogh

0

無法在事件日誌類你設置靜態成員函數來檢索PTR到 事件記錄實例?返回一個全局實例,如果這就是你有,

靜態事件記錄*事件記錄:: getLoggerInstance();

或者如果您有多個事件記錄器則更加細微。

靜態事件記錄*事件記錄:: getLoggerInstance(參數,...);

如果視圖需要在所述事件日誌記錄鉤,它檢索一個事件日誌記錄實例,並連接到它。

+0

我試圖避免強制所有視圖瞭解事件記錄器。最終我會爲這個軟件編寫插件,並且我希望這些類能夠發送信號而不必擔心插槽。 – kkeogh

+0

啊,如果這很重要,有一些事情可以讓日誌記錄設置更通用一些(例如,將一個事件源實現作爲一個混入多重繼承類),但基本上我會留在#1並忽略這個答案。 – Digikata