Use proper function
This warning category is spelled [use-proper-function]
by qmllint.
Property is a variant property: It may or may not be a method
What happened?
You used a property of the type var as if it were a callable function.
Why is this bad?
This affects the readability of the code, the QML engine will error out if the property does not contain a callable function, and the QML tooling can't apply specific method optimizations.
Example
import QtQuick Item { property var fun: () => console.log("Hello") Component.onCompleted: { fun(); } }
To fix this warning, declare fun
as a function to be able to call it:
import QtQuick Item { function fun() { console.log("Hello") } Component.onCompleted: { fun(); } }
Property is a QJSValue property: It may or may not be a method
What happened?
You used a property of the type QJSValue
as if it were a callable function.
Note: Properties of the type QJSValue can only be defined in C++.
Why is this bad?
The property was very probably not meant to be called and will make the QML engine error out at runtime.
Example
import QtQuick Rectangle { // Rectangle has a property gradient of the type QJSValue Component.onCompleted: { console.log(gradient()); } }
To fix this warning, remove the call to gradient
:
import QtQuick Item { // Rectangle has a property gradient of the type QJSValue Component.onCompleted: { console.log(gradient); } }
Alternatively, consider replacing the property definition with a regular Q_INVOKABLE method or a slot if you are the author of the property. This is only possible if the function is never meant to be changed in QML. If you actually need to store a callback, you're out of luck.
Signal is shadowed by a property
What happened?
You called a signal that is shadowed by a property or you shadowed a signal with a property.
Why is this bad?
The caller very probably expected to call a signal, and not the shadowing property. This could make the QML engine error out at runtime.
Example
import QtQuick Item { component Base: Item { signal helloSignal } Base { property int helloSignal // shadows helloSignal inherited from Base Component.onCompleted: { helloSignal(); } } }
To fix this warning, rename the shadowing property:
import QtQuick Item { component Base: Item { signal helloSignal } Base { property int helloSignal2 // does not shadow anymore Component.onCompleted: { helloSignal(); } } }
Method is shadowed by a property
See {Signal is shadowed by a property}.
Slot is shadowed by a property
See {Signal is shadowed by a property}.
Property is not a method
What happened?
You used a property of a type other than var or QJSValue
as if it were a callable function.
Why is this bad?
The property can't be called and will make the QML engine error out at runtime.
Example
To fix this warning, remove the call or make hello
a function:
import QtQuick Item { property int hello Component.onCompleted: { console.log(hello); } // alternative: function helloAlternative() { ... } Component.onCompleted: { console.log(helloAlternative()); } }
© 2024 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.