This question is a bit old now, but I ran into the same problem without finding a solution elsewhere, so maybe this will be useful for others to know. I tried exactly the same code as you, and found the the same issue of the signal not connecting properly. What worked for me was to add the following somewhere in the code (e.g. the class constructor) to get executed before the connect() call. #include <QDBusMetaType> // Add to code (e.g. constructor) to be run before the connect() call qDBusRegisterMetaType<InterfaceList>(); The connect() call then returned true, the signal fired, and I was able to extract the object properties straight from the InterfaceList object passed with the signal.