Sur cette page

Paramètres du gestionnaire de signaux

Cette catégorie d'avertissement est désignée par qmllint sous le nom « [signal-handler-parameters] ».

Cette catégorie d'avertissements comprend plusieurs avertissements, décrits dans les sections ci-dessous :

Le type du paramètre du signal n'a pas été trouvé

Que s'est-il passé ?

Un gestionnaire de signal a tenté de gérer un signal avec des paramètres de types QML inconnus.

Généralement, cela se produit lors de la gestion de signaux définis en C++ dans QML, lorsque le module contenant le signal défini en C++ ne déclare pas correctement sa dépendance QML vis-à-vis d’un autre module QML. Si le module contenant le signal défini en C++ se compile, cela indique qu’une dépendance a été déclarée uniquement au niveau C++ et non au niveau du module QML.

Remarque : si vous importez des modules QML comportant des dépendances externes, vérifiez qu'ils sont bien installés et que leurs modules se trouvent bien dans un chemin d'importation.

Cet avertissement peut également indiquer que le type de paramètre du signal défini en C++ n’a pas d’équivalent en QML. Il se peut, par exemple, que la macro ` QML_ELEMENT ` soit manquante pour ce type de paramètre. Dans ce cas, reportez-vous aux sections « Définition de types QML depuis le C++ » ou « Présentation — Intégration de QML et C++ ».

En quoi cela pose-t-il problème ?

Dans le premier cas, le module comportant le signal C++ présente une dépendance non déclarée au niveau du module QML, ce qui rend son utilisation difficile, car les utilisateurs doivent deviner les dépendances cachées du module.

Dans les deux cas, les outils QML ne parviennent pas à trouver l’équivalent QML du type C++ : le compilateur ne peut pas compiler ce gestionnaire de signal en C++ et qmllint QML Language Server ne peut pas analyser ce gestionnaire.

Exemple

Supposons que notre module comporte une classe C++ avec un signal « helloWorld » :

#include <QQuickItem>
#include <QtQml/qqmlregistration.h>
#include <QObject>

class MyCppObject : public QObject
{
 Q_OBJECT
 QML_ELEMENT
public:
 MyCppObject(QObject *parent = nullptr)
     : QObject(parent)
 {}

signals:
 void helloWorld(QQuickItem *i);

};

avec le fichier CMakeLists.txt suivant :

find_package(Qt6 6.5 REQUIRED COMPONENTS Quick QuickControls2)

qt_standard_project_setup(REQUIRES 6.5)

qt_add_executable(mymodule
 main.cpp
)

qt_add_qml_module(mymodule
    URI MyModule
    VERSION 1.0
    QML_FILES Main.qml
    SOURCES mycppobject.cpp mycppobject.h
)

# declare C++ dependency to Quick
target_link_libraries(appuntitled27
 PRIVATE Qt6::Quick
)

La dépendance C++ Quick a été déclarée, de sorte que cette classe puisse être compilée et que l'en-tête QQuickItem puisse être trouvée. De plus, mymodule n'a aucune dépendance QML vis-à-vis de Qt Quick.

Essayons maintenant de gérer ce signal « helloWorld » en QML :

import MyModule // name of the module with MyCppObject

MyCppObject {
    onHelloWorld: function (x) { console.log(x); } // not ok: Type QQuickItem was not found!
}

La raison de ce message d’avertissement est que, dans le code QML, QQuickItem et son équivalent QML Item ne sont pas reconnus : la dépendance QtQuick de MyModule n’a pas été déclarée dans le fichier CMakeLists.txt !

Vous pouvez l'ajouter comme suit dans l'appel à `qt_add_qml_module()` :

qt_add_qml_module(mymodule
    URI MyModule
    ...
    # declare QML dependencies to QtQuick:
    DEPENDENCIES QtQuick
    ...
)

Le code QML devrait désormais fonctionner correctement !

Le gestionnaire de signal possède plus de paramètres formels que le signal qu’il gère

Que s’est-il passé ?

Un gestionnaire de signal attend plus de paramètres que le signal n’en fournit réellement.

Pourquoi est-ce un problème ?

Les paramètres supplémentaires auront une valeur indéfinie.

Exemple

import QtQuick

Item {
    signal helloWorld(x: QtObject)  // signal expects only one parameter

    onHelloWorld: function (x,y,z) {} // not ok: signal handler handles three parameters
}

Pour corriger cet avertissement, supprimez les paramètres en trop dans le gestionnaire de signal ou ajoutez les paramètres manquants à la déclaration du signal :

import QtQuick

Item {
    signal helloWorld(x: QtObject)  // signal expects only one parameter

    onHelloWorld: function (x) {} // ok: signal handler handles one parameter

    signal alternativeHelloWorld(x: QtObject, y: int, y: int)  // signal expects three parameters

    onAlternativeHelloWorld: function (x,y,z) {} // ok: signal handler handles three parameters
}

Le signal possède un paramètre du même nom

Que s'est-il passé ?

Le signal ou le gestionnaire de signal a peut-être interverti certains de ses arguments, ou certains arguments sont peut-être manquants.

Pourquoi est-ce un problème ?

Il s'agit très probablement d'une faute de frappe et non d'une intention de l'utilisateur.

Exemple

Arguments manquants

import QtQuick

Item {
    signal helloWorld(x: QtObject, y: int)

    onHelloWorld: function (y) {} // not ok: it seems that x was forgotten
}

Pour corriger cet avertissement, ajoutez les paramètres manquants ou renommez le premier paramètre :

import QtQuick

Item {
    signal helloWorld(x: QtObject, y: int)

    onHelloWorld: function (x, y) {} // ok: parameters have the same order as in helloWorld

    signal alternativeHelloWorld(x: QtObject, y: int)

    onAlternativeHelloWorld: function (x) {} // ok: parameters have the same order as in helloWorld, even if y is missing
}

Arguments inversés

import QtQuick

Item {
    signal helloWorld(x: QtObject, y: int)

    onHelloWorld: function (y, x) {} // not ok: helloWorld expects first 'x' then 'y'
}

Pour corriger cet avertissement, réorganisez les paramètres dans le bon ordre :

import QtQuick

Item {
    signal helloWorld(x: QtObject, y: int)

    onHelloWorld: function (x, y) {} // ok: parameters have the same order as in helloWorld
}

Voir aussi qt_add_qml_module#déclaration-des-dépendances-de-module.

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