【发布时间】:2017-06-01 15:00:19
【问题描述】:
小问题:Qt 中是否有任何方法可以挂钩或嗅探现有的 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(),它们可以与彼此不直接认识的小部件交换信息或命令。很久以前,我认为这是一个很酷的解决方案。
但是在单例上过多的小部件会产生很多问题,我不想在这里讨论它。请不要讨论或抱怨旧架构,它对我没有帮助!我已经花了几个小时的研究来找到解决方案,希望你们中的某个人可以帮助我。如果您需要任何进一步的信息,请随时询问。
【问题讨论】:
标签: qt signals-slots