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.