[Interest] Qt 6.5.2 and qmllint questions/issues

Matthew Fincham matthewf at cat.co.za
Wed Aug 30 15:24:43 CEST 2023


Hi Ulf

Thank you for your response.

>> -- QtLocation --
> Thanks for catching this. See 
> https://codereview.qt-project.org/c/qt/qtlocation/+/500504 for a fix.
>
That's great, thank you.


>> -- 'as' operator --
> This should work. Type assertions (aka "as cast") are documented in 
> https://doc.qt.io/qt-6/qtqml-javascript-hostenvironment.html . What 
> kind of object does the loader produce here? Can you please open a bug 
> report with a minimal example?
>
A bug report has been added: https://bugreports.qt.io/browse/QTBUG-116614


>> -- Enums in gadgets --
> So, what you want to do is expose MyType as a namespace instead:
>
> namespace MyTypeNamespace {
>     Q_NAMESPACE
>     QML_FOREIGN_NAMESPACE(MyType)
>     QML_NAMED_ELEMENT(MyType)
> }
>
> You cannot have reference semantics on a value type. A type with 
> reference semantics (aka an "object type") needs to be derived from 
> QObject and have a Q_OBJECT macro. The engine plays somewhat loose 
> with that and allows you to still access enums from such broken types. 
> We should amend the documentation to warn about this problem and also 
> generate a run time warning from the engine.

The example gadget was not the best. The gadget is used as an actual 
value type in qml. A fuller example (as I have it) would be:

C++:

    struct TestGadget
    {
         Q_GADGET
         QML_ELEMENT

         Q_PROPERTY(int value MEMBER value)

    public:
         enum class GadgetEnum
         {
             OptionA,
             OptionB,
             OptionC,
         };
         Q_ENUM(GadgetEnum)

    public:
         static void registerType();

    public:
         int value = 0;
    };


QML: (apart from where it is used as a data type) example usage would be

    // reference an instance of the gadget
    ... someGadgetValue.value ...

    // use the enum
    console.log(TestGadget.GadgetEnum.OptionB)


I've tried various permutations of the namespace macros you described, 
but can't get it right. Firstly, is this possible, and if it is, what is 
the canonical way of doing this? As it is it works, but you have said it 
is actually a broken type.

As a side note - a Google search for "qml q_gadget enum" has these as 
the top two results (at least for me) which both recommend something 
along the lines of the above.
- 
https://stackoverflow.com/questions/66855134/how-to-access-a-q-enum-declared-in-c-class-from-qml
- https://qml.guide/enums-in-qt-qml

I know they are not Qt documentation. Just pointing it out - it would be 
nice if the Qt could somehow get a canonical example to the top of that 
search.

Thanks again for the feedback

Kind regards
Matthew
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20230830/38d24b87/attachment.htm>


More information about the Interest mailing list