[Interest] Qt 6.5.2 and qmllint questions/issues
Matthew Fincham
matthewf at cat.co.za
Thu Aug 31 11:12:06 CEST 2023
Hi
I'm sorry for the burst of emails, and I'm not sure if this should be a
new thread or not.
Another issue we are having with qmllint is adding type information for
objects added to the global object in C++. We've used this to provide
custom log and assert functions, but obviously the linter doesn't know
about them. If they are added to qml/jsroot.qmltypes (along similar
lines to the 'Console' type) then the linter does know about the type.
Is there a way to register types in the global property 'externally' ?
I've tried a few variations of using the '-i' option in the linter, but
without success.
Many thanks
Matthew Fincham
On 2023/08/30 15:24, Matthew Fincham via Interest wrote:
> 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
>
>
> _______________________________________________
> Interest mailing list
> Interest at qt-project.org
> https://lists.qt-project.org/listinfo/interest
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.qt-project.org/pipermail/interest/attachments/20230831/0f73e835/attachment.htm>
More information about the Interest
mailing list