Sur cette page

Utilisation d'une fonction appropriée

Cette catégorie d'avertissement est orthographiée « [use-proper-function] » par qmllint.

La propriété est une propriété de type « variant » : elle peut être ou non une méthode

Que s’est-il passé ?

Vous avez utilisé une propriété de type « var » comme s’il s’agissait d’une fonction appelable.

Pourquoi est-ce un problème ?

Cela nuit à la lisibilité du code ; le moteur QML générera une erreur si la propriété ne contient pas de fonction appelable, et les outils QML ne pourront pas appliquer certaines optimisations spécifiques aux méthodes.

Exemple

import QtQuick

Item {
    property var fun: () => console.log("Hello")
    Component.onCompleted: { fun(); }
}

Pour corriger cet avertissement, déclarez ` fun ` comme une fonction afin de pouvoir l'appeler :

import QtQuick

Item {
    function fun() {
        console.log("Hello")
    }

    Component.onCompleted: { fun(); }
}

La propriété est une propriété QJSValue : elle peut être ou non une méthode

Que s'est-il passé ?

Vous avez utilisé une propriété de type QJSValue comme s'il s'agissait d'une fonction appelable.

Remarque : les propriétés de type QJSValue ne peuvent être définies qu’en C++.

Pourquoi est-ce un problème ?

Cette propriété n'était très probablement pas destinée à être appelée et provoquera une erreur du moteur QML lors de l'exécution.

Exemple

import QtQuick

Rectangle {
    // Rectangle has a property gradient of the type QJSValue
    Component.onCompleted: { console.log(gradient()); }
}

Pour corriger cet avertissement, supprimez l’appel à ` gradient` :

import QtQuick

Item {
    // Rectangle has a property gradient of the type QJSValue
    Component.onCompleted: { console.log(gradient); }
}

Sinon, envisagez de remplacer la définition de la propriété par une méthode « Q_INVOKABLE » classique ou par un slot si vous êtes l'auteur de la propriété. Cela n'est possible que si la fonction n'est jamais censée être modifiée en QML. Si vous avez réellement besoin de stocker un callback, vous n'avez pas de chance.

Le signal est masqué par une propriété

Que s’est-il passé ?

Vous avez appelé un signal masqué par une propriété ou vous avez masqué un signal avec une propriété.

Pourquoi est-ce un problème ?

L'appelant s'attendait très probablement à appeler un signal, et non la propriété qui le masque. Cela pourrait provoquer une erreur du moteur QML lors de l'exécution.

Exemple

import QtQuick

Item {
    component Base: Item {
        signal helloSignal
    }

    Base {
        property int helloSignal // shadows helloSignal inherited from Base
        Component.onCompleted: { helloSignal(); }
    }
}

Pour corriger cet avertissement, renommez la propriété qui masque le signal :

import QtQuick

Item {
    component Base: Item {
        signal helloSignal
    }

    Base {
        property int helloSignal2 // does not shadow anymore
        Component.onCompleted: { helloSignal(); }
    }
}

Une méthode est masquée par une propriété

Voir {Un signal est masqué par une propriété}.

Le slot est masqué par une propriété

Voir {Le signal est masqué par une propriété}.

La propriété n'est pas une méthode

Que s'est-il passé ?

Vous avez utilisé une propriété d'un type autre que var ou QJSValue comme s'il s'agissait d'une fonction appelable.

Pourquoi est-ce un problème ?

La propriété ne peut pas être appelée et provoquera une erreur du moteur QML lors de l’exécution.

Exemple

import QtQuick

Item {
    property int hello
    Component.onCompleted: { console.log(hello()); }
}

Pour corriger cet avertissement, supprimez l’appel ou transformez ` hello ` en fonction :

import QtQuick

Item {
    property int hello
    Component.onCompleted: { console.log(hello); }

    // alternative:
    function helloAlternative() { ... }
    Component.onCompleted: { console.log(helloAlternative()); }
}

© 2026 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.