2012-10-12 23 views
0

通常,Qt信號在QObject的特定實例上觸發。給定類的所有實例上的Qt觸發信號

有沒有辦法通過,也許MetaObject的特定類的所有實例觸發它?

或者唯一的方法是維護你自己的所有實例的靜態列表,也許通過使用構造函數和析構函數,然後只需要Q_FOREACH它呢?

回答

1

如何在幕後創建單例,並將所有實例連接到該單例的信號(信號 - 信號連接)? 當你想要所有的實例發出信號時,只需讓單例發出它,所有的實例都會轉發它。

+0

這實際上是個不錯的主意 - 比我的全局靜態成員變量的概念好得多。 – qdot

2

信號不能定義它們(或導出從定義它們的類)的類的外部發射,而不通過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。

相關問題