You could create a standardized set of mule objects based upon QObject that handle signals of different data types. Then add the appropriate ones to the classes that need them as members or inherit them. Create callbacks that are called by these mule objects with the behavior needed from each class or other structure. If you don't inherit from them you can still use templates on the objects that own the QObjects if you need to simply other boiler plate code.
I needed the opposite the other day. I had templated classes I wanted to add signals to. So I created a data member mule QObject.
Edit: One problem with this approach is that object properties would not be unique. Not sure how to get around that.