Почему бы вам просто не использовать один выделенный подкласс QObject в качестве шины сообщений?Там вы определяете все сигналы, которыми можно обмениваться через шину сообщений, и предоставляете соответствующие методы уведомления, которые излучают эти сигналы.Теперь каждый компонент, который хочет получать «сообщения», может подключаться к интересующим сигналам.
Если вам нужен более общий метод, используйте тот же подход, что и раньше.Однако подкласс (singleton) QObject теперь имеет только сигнал «message (QByteArray)» и открытый метод «sendMessage (QByteArray)», который испускает этот сигнал.Возможно, вы захотите также объявить метод отправки сообщения как слот, на случай, если вы захотите подключить другой сигнал к методу отправки.
Я сам использую эти подходы, и они прекрасно работают.Даже разные потоки могут общаться друг с другом с помощью этого механизма без каких-либо проблем.Если вы используете подход QByteArray, вы получите нечто похожее на DBus.Вы сериализуете и десериализуете свои сообщения и автоматически убедитесь, что все получатели сообщений получают свою собственную копию сообщений со всеми преимуществами, которые вы получаете, если выполняете параллельные вычисления.