簡短的問題:Qt中是否有任何方法來鉤住或嗅探現有的SLOT?或者也許連接一個SLOT到另一個SLOT?不改變現有SLOT的實施?像觀察員一樣,如果插槽是從系統中的某個地方調用的,就可以得到通知。如何觀察SLOT?
TL; DR
我想重構一個老的Qt應用程序,它使用一個巨大的和馬車單身託管和管理不同的部件和它們之間的通信處理。在第一步中,我不想更改所有託管的小部件,因爲它們中有很多。我不想更新我的舊單身人士的所有安裝。所以改變單身人士對我來說不是一種選擇。 讓我們在這裏帶一點點僞代碼,首先是單例。
class UgglyOldSingleton
{
private:
UgglyOldSingleton();
~UgglyOldSingleton();
QList allRegistedWidgets;
public:
static UgglyOldSingleton *instance();
void registerMe(oldInterface obj);
public slots:
void sendMessageToTarget(QString targetName, QString message);
void action2();
…
}
它是如何工作的?
每個使用的窗口小部件都實現了oldInteface和singleton上的啓動寄存器。通過singleton :: instance-> sendMessageToTarget()它們可以將信息或命令交換到那些不直接相互認識的小部件。很久以前,我認爲這是一個很酷的解決方案。
但是在單例中有太多的小部件會產生很多問題,我不想在這裏討論它。請不要討論或抱怨舊的架構,它不會幫助我!我已經花了數小時的研究來尋找解決方案,希望你們中的某個人能夠幫助我。如果您需要更多信息,請隨時諮詢。
意指屬於[KDAB GammaRay](https://www.kdab.com/)的[Githup repo](https://github.com/KDAB/GammaRay)? – sandkasten
正是那個回購。 –
接受這個解決方案,因爲它使我在正確的軌道上如何處理問題。對於其他人,我找不到任何簡單的方法。如果你找到了,在這裏發佈,我會改變接受的答案。 – sandkasten