[Interest] Accessing existing enums from QML

Jan Kundrát jkt at flaska.net
Tue May 13 17:30:18 CEST 2014


On Wednesday, 7 May 2014 21:41:50 CEST, Tomasz Olszak wrote:
> Currently Qml doesn't handle such case. You can wrap your enums in 
QtObject 
> and expose it as singleton[1] object and use from inside Qml:
>
> import imap
> Item {
> property int operation: imap.FLAG_ADD
> }

Do you have a small example on how to do just that? Again, the problem is 
that the original enum is defined *outside* of any QObject. In principle, I 
could change this, but for clarity I would prefer to do something like a 
typedef. Unfortunately, typedefs doesn't really work, and the best approach 
that we were able to come up with is something ugly like this:

namespace Original {
  enum Foo { A, B };
}

namespace QmlSupport {

class Whatever : public QObject
{
  Q_OBJECT
  Q_PROPERTY(Foo foo MEMBER m_foo)
public:
  enum Foo {
    A = Original::A,
    B = Original::B,
  }
}

}

...and having to duplicate my enums like this is rather suboptimal.

Using the typedef to prepare a new name for an older enum, it appears that 
I can only use Q_PROPERTY with the new name which refers to an enum inside 
some QObject. I can only have one Q_DECLARE_METATYPE, either for 
Original::Foo or the QmlSupport::Whatever::Foo. When I 
qRegisterMetaType<QmlSupport::Whatever::Foo>, I still get "undefined" when 
I try to console.log(whatever.A) or console.log(whatever.foo).

Or is moving the enums into some QObject my only chance, actually?

With kind regards,
Jan

-- 
Trojitá, a fast Qt IMAP e-mail client -- http://trojita.flaska.net/



More information about the Interest mailing list