通常,Qt信号在QObject的特定实例上触发。给定类的所有实例上的Qt触发信号
有没有办法通过,也许MetaObject的特定类的所有实例触发它?
或者唯一的方法是维护你自己的所有实例的静态列表,也许通过使用构造函数和析构函数,然后只需要Q_FOREACH它呢?
通常,Qt信号在QObject的特定实例上触发。给定类的所有实例上的Qt触发信号
有没有办法通过,也许MetaObject的特定类的所有实例触发它?
或者唯一的方法是维护你自己的所有实例的静态列表,也许通过使用构造函数和析构函数,然后只需要Q_FOREACH它呢?
如何在幕后创建单例,并将所有实例连接到该单例的信号(信号 - 信号连接)? 当你想要所有的实例发出信号时,只需让单例发出它,所有的实例都会转发它。
信号不能定义它们(或导出从定义它们的类)的类的外部发射,而不通过QMetaObject
系统调用它:
QMetaObject::invokeMethod(myObj, "mySignal",
Q_ARG(QString, "str"),
Q_ARG(int, 42));
但是似乎没有成为一个API让所有特定类型发出的所有对象的方法,我能找到最接近的是:
for (QWidget* widget : QApplication::allWidgets()) {
if (dynamic_cast< myType* >(widget)) {
QMetaObject::invokeMethod(widget, "mySignal",
Q_ARG(QString, "str"),
Q_ARG(int, 42));
}
}
但显然这只是为QWidget
派生类型的作品,似乎没有成为一个QObject
equival ENT。
这实际上是个不错的主意 - 比我的全局静态成员变量的概念好得多。 – qdot