Remember that sections "private", "public" and "protected" are meaningful only during compilation - it is the compiler who decides whether one can access a particular method or field or not. But signal-slot connections are performed during runtime by the meta object system and are always called by the receiver object itself, so it will never violate a private slot. Bottom line - slots are private when called as regular methods but always public when referenced by QMetaObject::invokeMethod().