- 
    
Bug
 - 
    Resolution: Out of scope
 - 
    
P3: Somewhat important
 - 
    None
 - 
    4.8.2
 - 
    None
 - 
    windows, linux, mac
 
I know that the issue QTBUG-19741 is marked as fixed in 4.8 but I don't believe this issue has been fixed, at least not in all cases.
I have 4.8.2 and the following setup:
namespace one {
namespace two {
class MyEnum {
Q_GADGET
Q_ENUMS(Type)
public:
  enum Type {
    Default = 1,
    NonDefault = 2
  };
private:
   MyEnum() {};
   ~MyEnum(){};
};
class EnumUser : pubic QObject {
Q_OBJECT
public:
  Q_INVOKABLE void doStuff(one::two::MyEnum::Type enumValue);
};
QML_DECLARE_TYPE(one::two::EnumUser)
// so that the enum can be stuffed into QVariant
Q_DECLARE_METATYPE(one::two::MyEnum::Type)
// somewhere during initialization types are registered using 
// so that the enum can be used with queued connections
qRegisterMetaType<one::two::MyEnum::Type>();
// so that it can be addressed from Qml as "MyEnum."
qmlRegisterUncreatableType<one::two::MyEnum>("one.two", 1, 0, "MyEnum", "Uncreatable type"); 
qmlRegisterType<one::two::EnumUser>("one.two", 1, 0, "EnumUser); 
// then in QML
import one.two;
EnumUser {
  onStuffHappened: doStuff(EnumUser.NonDefault);
}
}
}
In this configuration doStuff() always get invoked with 0 as the parameter, no matter what I pass to it. There are no errors or warnings on the command line when this happens.
I know that MyEnum is registered correctly since properties I have properties of this type and they work as expected if I assign values to them or read them. But Q_INVOKABLE methods don't work.
The only work around I found is to add a private method with the same name but with an int parameter in addition to the one with enum parameter: doStuff(int), and cast the int to the enum. Then QML calls this method with an int representing correct enum value.:
// added to the EnumUser class private: Q_INVOKABLE void doStuff(int); void EnumUser::doStuff(int value) { doStuff(static_cast<one::two::MyEnum::Type>(value)); }