It even allows you to enumerate methods of a class and call a method by name (meaning not by having a pointer to it, but actually by calling its name - see QMetaObject::invokeMethod) and allows to pass as arguments and retrieve as the result non-standard datatypes. Furthermore it allows you to change properties of object without even knowing their types (on the other hand you can ask for the type) or functions responsible for getting or setting a particular property (enumerating properties is of course also possible so your code can handle custom components it knew nothing about during compilation). The whole concept is very flexible because of its runtime capabilities and in my opinion fully justifies the need to use an additional tool to process the code (especially that it gives means to do it automatically).
Bookmarks