Ein üblicher Weg, z.B. gesehen in kdelibs, dann ist dies:
Q_SIGNALS:
#ifndef Q_MOC_RUN
private: // don't tell moc, doxygen or kdevelop, but those signals are in fact private
#endif
void somePrivateSignal();
Dies macht das Signal privat, das heißt es nur von der Klasse emittiert werden kann sich aber nicht von ihrer Unterklassen. Um das "private:" nicht zu deaktivieren, wird Q_SIGNALS (moc würde dann einigePrivateSignal nicht als Signal sehen), es ist in Q_MOC_RUN, das nur definiert wird, wenn moc läuft.
Edit: Dieser Ansatz funktioniert nicht für die mit Qt 5 (connect(a, &A::someSignal, b, &B::someSlot)
) eingeführten new-style connects, da sie das Signal benötigen, um zugänglich zu sein.
sie sind auch öffentlich in dem Sinne, dass jede andere Klasse sie emittieren kann, da sie öffentliche Funktionen sind. Dies könnte sich gegenüber früheren Versionen von Qt geändert haben. Sehen Sie hier http://StackOverflow.com/Questions/19129133/qt-signals-and-slots-permissions/19130567#19130567 – johnbakers