Paramètres du gestionnaire de signal
Cette catégorie d'avertissement est épelée [signal-handler-parameters] par qmllint.
Cette catégorie d'avertissement comporte plusieurs avertissements, décrits dans les sections ci-dessous :
Le type de paramètre dans le signal n'a pas été trouvé
Qu'est-ce qui s'est passé ?
Un gestionnaire de signal a essayé de traiter un signal avec des paramètres de types QML inconnus.
En général, cela se produit lors du traitement 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, c'est le signe qu'une dépendance n'a été déclarée qu'au niveau C++ et non au niveau du module QML.
Remarque : si vous importez des modules QML avec des dépendances externes, vérifiez qu'ils sont effectivement installés et que leurs modules se retrouvent dans un chemin d'importation.
L'avertissement peut également indiquer que le type de paramètre du signal défini en C++ n'a pas d'équivalent en QML. Le type de paramètre peut ne pas comporter la macro QML_ELEMENT, par exemple. Dans ce cas, reportez-vous à la section Définir des types QML à partir de C++ ou à la section Vue d'ensemble - Intégration QML et C++.
Pourquoi est-ce mauvais ?
Dans le premier cas, le module contenant le signal C++ a une dépendance non déclarée au niveau du module QML, ce qui complique l'utilisation du module, car les utilisateurs du module doivent deviner les dépendances cachées du module.
Dans les deux cas, l'outil QML n'est pas en mesure de trouver la contrepartie QML du type C++ : le compilateur ne peut pas compiler ce gestionnaire de signaux en C++ et qmllint ainsi que QML Language Server ne peuvent pas analyser ce gestionnaire.
Exemple
Imaginons que notre module ait 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 peut se compiler et que l'inclusion QQuickItem peut être trouvée. De plus, mon module n'a pas de dépendance QML sur Qt Quick.
Maintenant, essayons 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 du message d'avertissement est que dans le code QML, QQuickItem et son équivalent QML Item ne sont pas connus : 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
...
)Maintenant, le code QML devrait fonctionner à nouveau !
Le gestionnaire de signal a plus de paramètres formels que le signal qu'il gère
Qu'est-ce qui s'est passé ?
Un gestionnaire de signal attend plus de paramètres que ce que le signal fournira réellement.
Pourquoi est-ce mauvais ?
Les paramètres supplémentaires seront indéfinis.
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 supplémentaires du 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 a un paramètre du même nom
Que s'est-il passé ?
Le signal ou le gestionnaire de signal peut avoir interverti certains de ses arguments, ou certains arguments peuvent être manquants.
Pourquoi est-ce mauvais ?
Il s'agit très probablement d'une faute de frappe qui n'a pas été voulue par 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 intervertis
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#declaring-module-dependencies.
© 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.