Enums are stored as strings, that improves configuration file
readability and maintainability. String values are obtained via
QMetaEnum, and since with Qt 5.5 QMetaEnum::fromType() includes a
static_assert, this has to be a safe method.
* Add another constructor to save a call to proxyFunc when its not needed
note that this call is a virtual function call
* Pass in proxyFunc by const reference
* Move get methods together