Parameter des Signal-Handlers
Diese Warnungskategorie wird von qmllint als „ [signal-handler-parameters] “ bezeichnet.
Diese Warnkategorie umfasst mehrere Warnungen, die in den folgenden Abschnitten beschrieben werden:
Der Typ des Parameters im Signal wurde nicht gefunden
Was ist passiert?
Ein Signal-Handler hat versucht, ein Signal mit Parametern unbekannter QML-Typen zu verarbeiten.
Dies tritt in der Regel bei der Verarbeitung von in C++ definierten Signalen in QML auf, wenn das Modul mit dem in C++ definierten Signal seine QML-Abhängigkeit zu einem anderen QML-Modul nicht ordnungsgemäß deklariert hat. Wenn das Modul mit dem in C++ definierten Signal kompiliert werden kann, ist dies ein Anzeichen dafür, dass eine Abhängigkeit nur auf C++-Ebene und nicht auf QML-Modulebene deklariert wurde.
Hinweis: Wenn Sie QML-Module mit externen Abhängigkeiten importieren, stellen Sie sicher, dass diese tatsächlich installiert sind und dass sich ihre Module in einem Importpfad befinden.
Die Warnung kann auch darauf hinweisen, dass der Parametertyp des in C++ definierten Signals kein QML-Äquivalent hat. Dem Parametertyp fehlt beispielsweise möglicherweise das Makro „ QML_ELEMENT “. Lesen Sie in diesem Fall die Abschnitte „Definieren von QML-Typen aus C++ “ oder „Übersicht – QML- und C++-Integration “.
Warum ist das problematisch?
Im ersten Fall weist das Modul mit dem C++-Signal eine nicht deklarierte Abhängigkeit auf QML-Modul-Ebene auf, was die Verwendung des Moduls erschwert, da Nutzer des Moduls die verborgenen Abhängigkeiten des Moduls erraten müssen.
In beiden Fällen können die QML-Entwicklungswerkzeuge das QML-Gegenstück zum C++-Typ nicht finden: Der Compiler kann diesen Signal-Handler nicht in C++ kompilieren, und qmllint QML Language Server kann diesen Handler nicht analysieren.
Beispiel
Nehmen wir an, unser Modul enthält eine C++-Klasse mit einem 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);
};mit folgender `CMakeLists.txt`:
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
)Die C++-Abhängigkeit „ Quick “ wurde deklariert, sodass diese Klasse kompiliert werden kann und der Include „ QQuickItem “ gefunden wird. Außerdem hat „mymodule“ keine QML-Abhängigkeit von Qt Quick.
Versuchen wir nun, dieses „ helloWorld “-Signal in QML zu verarbeiten:
import MyModule // name of the module with MyCppObject
MyCppObject {
onHelloWorld: function (x) { console.log(x); } // not ok: Type QQuickItem was not found!
}Der Grund für die Warnmeldung ist, dass im QML-Code „ QQuickItem “ und sein QML-Pendant „ Item “ nicht bekannt sind: Die Abhängigkeit „ QtQuick “ von „MyModule“ wurde in der „CMakeLists.txt“ nicht deklariert!
Sie können sie wie folgt im Aufruf von `qt_add_qml_module()` hinzufügen:
qt_add_qml_module(mymodule
URI MyModule
...
# declare QML dependencies to QtQuick:
DEPENDENCIES QtQuick
...
)Nun sollte der QML-Code wieder einwandfrei funktionieren!
Der Signal-Handler hat mehr formale Parameter als das Signal, das er verarbeitet
Was ist passiert?
Ein Signal-Handler erwartet mehr Parameter, als das Signal tatsächlich bereitstellt.
Warum ist das schlecht?
Die zusätzlichen Parameter haben einen undefinierten Wert.
Beispiel
import QtQuick
Item {
signal helloWorld(x: QtObject) // signal expects only one parameter
onHelloWorld: function (x,y,z) {} // not ok: signal handler handles three parameters
}Um diese Warnung zu beheben, entfernen Sie die überzähligen Parameter aus dem Signal-Handler oder fügen Sie die fehlenden Parameter zur Deklaration des Signals hinzu:
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
}Das Signal hat einen Parameter mit demselben Namen
Was ist passiert?
Möglicherweise wurden beim Signal oder beim Signal-Handler einige Argumente vertauscht, oder es fehlen Argumente.
Warum ist das ein Problem?
Es handelt sich höchstwahrscheinlich um einen Tippfehler, der vom Benutzer nicht beabsichtigt war.
Beispiel
Fehlende Argumente
import QtQuick
Item {
signal helloWorld(x: QtObject, y: int)
onHelloWorld: function (y) {} // not ok: it seems that x was forgotten
}Um diese Warnung zu beheben, fügen Sie die fehlenden Parameter hinzu oder benennen Sie den ersten Parameter um:
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
}Vertauschte Argumente
import QtQuick
Item {
signal helloWorld(x: QtObject, y: int)
onHelloWorld: function (y, x) {} // not ok: helloWorld expects first 'x' then 'y'
}Um diese Warnung zu beheben, ordnen Sie die Parameter in der richtigen Reihenfolge an:
import QtQuick
Item {
signal helloWorld(x: QtObject, y: int)
onHelloWorld: function (x, y) {} // ok: parameters have the same order as in helloWorld
}Siehe auch 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.