On 3/20/2020 12:53 AM, Jason H wrote:
That's only part of it.  I want Qt to support it too, mainly for
> console-qDebug output, but all for use in UI. (Imagine a text element
> that displays a socket state as it's text.)

I understand, my reply wasn't aimed at your original question.

FWIW, the basic issue seems to be that enums are treated as simple integers in QML (the QMetaType on the C++ side is always QMetaType::Int). Otherwise it would be easy to just QVariant::toString() them and see the value name like in C++. I couldn't come up with any clever way to provide a generic C++ toString() method for enum values sent from QML. The actual type info is "lost in translation" so to speak.

Of course you could make a toString() helper method for each actual enum type (eg. myEnumToString()) and invoke that from QML (from a gadget singleton or a context property object, or whatever). Which could then use QMetaEnum to deliver the actual name. Seems like quite a bit of overhead for something like that, but then again if you have a lot of values or they change often, it might be preferable to a value<->name lookup table in QML/JS.

OTOH if we're talking purely in QML/JS then you could just use an object to store the values and names together. There's a big thread on it at StackOverflow[1]. Here's one way which is only a little ugly because the Qt ES version doesn't seem to support Symbol().description [2] (yet?):


const Positions = Object.freeze({
  Unspecified: Symbol(1),
  BackFace:    Symbol(2),
  FrontFace:   Symbol(4)
});

const face = Positions.FrontFace;
console.log(face, String(face).slice(7, -1));  // Sumbol(4), 4

switch (face) {
  case Positions.BackFace:
    console.log("The back");
    break;
  case Positions.FrontFace:
    console.log("The front");
    break;
  default:
    console.log("Unknown face");
}

Obviously one could come up with a little helper function/object which makes this prettier. And you could make it auto-assign incremental values if one isn't provided in the "constructor" (like a C enum does)

Cheers,
-Max


[1]: https://stackoverflow.com/questions/287903/what-is-the-preferred-syntax-for-defining-enums-in-javascript [2]: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/description

_______________________________________________
Interest mailing list
Interest@qt-project.org
https://lists.qt-project.org/listinfo/interest

Reply via email to