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
import QtQuick Item { property int hello Component.onCompleted: { console.log(hello()); } }
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()); } }