通常,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