Print warning if referenced QML property is undefined ?
-
wrote on 2 Jul 2019, 15:09 last edited by aha_1980 7 Feb 2019, 15:12
Is there a way to have the QQmlEngine or QQmlComponant produce warnings if a QML file is referencing a property that doesn't exist?
For example:
Item { id: item1 property int myProperty1: 10 } Item { id: item2 property int myProperty2: item1.mispelledMyProperty1 }
This will load and not display any issues until you try to print out "myProperty2" and you'll get "undefined". It would be nice if there was a way to get a warning when loading the qml file.
-
wrote on 2 Jul 2019, 16:33 last edited by fcarney 7 Feb 2019, 16:34
@poncho524
It is valid to have a property set to undefined. You can even set the property explicitly using the "undefined" key word. So to QML it is not an error. If you are concerned that a property is getting set to undefined you could do something like this:Item{ property int myProperty2: item1.mispelledMyProperty1 Component.onCompleted: { if(myProperty2 == undefined) console.log("Danger danger! Will Robinson!") } }
Or maybe even call a function that returns a value:
property int myProperty2: item1.mispelledMyProperty1 == undefined ? func_that_logs_and_returns_value() : item1.mispelledMyProperty1
Edit: Just realized it was mispelled. So yeah, it should warn about mispelled stuff. Sorry for the rant.
-
wrote on 2 Jul 2019, 17:54 last edited by
@poncho524 said in Print warning if referenced QML property is undefined ?:
property int myProperty2: item1.mispelledMyProperty1
My guess is that the reason it does not flag an error is because of lazy evaluation. It doesn't do anything with it until its used. Where your C++ compiler checks everything even if it is never used. I ran into this same issue with Python. You don't see errors until it tries to run the code. Not sure there is a good fix.
-
wrote on 2 Jul 2019, 22:10 last edited by
I suppose if you really wanted to get crazy you could crawl thru the metadata of each QQuickItem and check for property values of "unknown". I'm thinking you'd only want something like this available during development/debug.
ick
1/4