Learn what Felgo offers to help your business succeed. Start your free evaluation today! Felgo for Your Business

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()); }
}
Qt_Technology_Partner_RGB_475 Qt_Service_Partner_RGB_475_padded