Ein üblicher Weg, z.B. in kdelibs, ist dieser:
Q_SIGNALS:
#ifndef Q_MOC_RUN
private: // don't tell moc, doxygen or kdevelop, but those signals are in fact private
#endif
void somePrivateSignal();
Dadurch wird das Signal privat, d.h. es kann nur von der Klasse selbst, nicht aber von ihren Unterklassen ausgesendet werden. Damit das "private:" nicht Q_SIGNALS außer Kraft setzt (moc würde dann somePrivateSignal nicht als Signal sehen), befindet es sich in Q_MOC_RUN, das nur definiert ist, wenn moc läuft.
Editar: Dieser Ansatz funktioniert nicht für die mit Qt 5 eingeführten neuen Verbindungsarten ( connect(a, &A::someSignal, b, &B::someSlot)
), da sie die Zugänglichkeit des Signals voraussetzen.
0 Stimmen
Verwenden Sie in diesem Fall das PIMPL-Muster.