I don't agree with reasoning about cluttering API. The clutter was just moved from a class level to a module level. Creating classes that does the same but in a bit different fashion is rather Java like style, which is not bad by definition, but it is not nice from documentation / IDE point of view. It is much easier to miss a class then a method. Moreover it creates object ownership questions who should own an operation object, of course in Java it would not be a problem at all as it has garbage collector :-)

I like QNAM api design it gives clean code especially if QNAM::finished(QNetworkReply * reply) signal is used because "reply" can be used as an Id too. Anyway can you be more specific about what is exactly wrong with such approach?