2012-10-12 3 views
0

Qt 신호는 일반적으로 QObject의 특정 인스턴스에서 트리거됩니다.주어진 클래스의 모든 인스턴스에 대한 Qt 트리거 신호

MetaObjects를 통해 특정 클래스의 모든 인스턴스에서 트리거하는 방법이 있습니까?

또는 유일한 방법은 생성자와 소멸자를 사용하여 모든 인스턴스의 정적 목록을 유지 관리 한 다음 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.