短い質問: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 :: instance-> sendMessageToTarget()経由で、情報やコマンドをウィジェットに交換して、お互いを直接知りません。長い間前、私はこれがクールな解決策だと思っています。
しかし、シングルトンにあまりにも多くのウィジェットがあると、多くの問題が生じます。ここではそれについて議論したくありません。そして、古い建築について議論したり文句を言ったりしないでください。それは私を助けません!私はすでに解決策を見つけるために何時間もの研究を費やしています。あなた方の誰かが私を助けてくれることを願っています。詳しい情報が必要な場合は、お気軽にお問い合わせください。
[KDAB GammaRay](https://www.kdab.com/)に属するこの[Githup repo](https://github.com/KDAB/GammaRay)を意味しますか? – sandkasten
正確にそのレポ。 –
解決策としてこれを受け入れるのは、問題をどのように処理するかを正しい軌道に乗せるためです。他の人にとって、私は簡単な方法を見つけることはありません。あなたが見つけたら、ここに投稿して、受け入れられた答えを変更します。 – sandkasten