通常、Qt シグナルは QObject の特定のインスタンスでトリガーされます。
おそらくMetaObjectsを介して、特定のクラスのすべてのインスタンスでそれをトリガーする方法はありますか?
または、すべてのインスタンスの独自の静的リストを維持する唯一の方法は、おそらくコンストラクタとデストラクタを使用してから、Q_FOREACH だけにすることですか?
通常、Qt シグナルは QObject の特定のインスタンスでトリガーされます。
おそらくMetaObjectsを介して、特定のクラスのすべてのインスタンスでそれをトリガーする方法はありますか?
または、すべてのインスタンスの独自の静的リストを維持する唯一の方法は、おそらくコンストラクタとデストラクタを使用してから、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
バックグラウンドでシングルトンを作成し、すべてのインスタンスをそのシングルトンからのシグナルに接続する (シグナル間接続) のはどうですか? すべてのインスタンスにシグナルを発信させたい場合は、シングルトンにシグナルを発信させるだけで、すべてのインスタンスがそれを転送します。