Fehlender Typ
Diese Warnkategorie wird von qmllint mit [missing-type]
geschrieben.
Typ des Alias kann nicht abgeleitet werden
Was ist passiert?
Eine Alias-Eigenschaft verweist auf eine Eigenschaft mit einem C++-Typ, dessen QML-Gegenstück nicht gefunden wurde. Dies kann durch den Import eines QML-Moduls verursacht werden, das seine QML-Abhängigkeiten von anderen Modulen nicht deklariert.
Hinweis: Wenn Sie QML-Module mit externen Abhängigkeiten importieren, vergewissern Sie sich, dass diese tatsächlich installiert sind und dass ihre Module in einem Importpfad landen.
Die Warnung kann auch darauf hinweisen, dass der Typ der Eigenschaft, auf die der Alias verweist, kein QML-Gegenstück hat. Dem referenzierten Eigenschaftstyp könnte zum Beispiel das Makro QML_ELEMENT fehlen. Siehe in diesem Fall Definieren von QML-Typen aus C++ oder Übersicht - QML und C++ Integration.
Warum ist das schlecht?
Das QML-Tooling ist nicht in der Lage, das QML-Gegenstück des C++-Typs zu finden: Der Compiler kann diesen Eigenschaftsalias nicht nach C++ und qmllint kompilieren und auch QML Language Server kann diesen Eigenschaftsalias nicht analysieren.
Beispiel
Unser QML-Modul hat eine C++-Klasse mit einer Eigenschaft myProperty
:
#include <QQuickItem> #include <QtQml/qqmlregistration.h> #include <QObject> class MyCppObject : public QObject { Q_OBJECT QML_ELEMENT public: MyCppObject(QObject *parent = nullptr) : QObject(parent) {} Q_PROPERTY(QQuickItem *myProperty READ myProperty WRITE setMyProperty NOTIFY notifyMyProperty) QQuickItem *myProperty() { return m_myProperty; } void setMyProperty(QQuickItem *item) { emit notifyMyProperty(); m_myProperty = item; } private: QQuickItem *m_myProperty; signals: void notifyMyProperty(); };
mit folgender CMakeLists.txt
:
project(mymodule VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 6.5 REQUIRED COMPONENTS Quick) qt_standard_project_setup(REQUIRES 6.5) qt_add_executable(appmymodule main.cpp ) qt_add_qml_module(appmymodule URI mymodule VERSION 1.0 QML_FILES Main.qml HelloWorld.qml SOURCES mycppobject.cpp mycppobject.h ) target_link_libraries(appmymodule PRIVATE Qt6::Quick )
Die C++-Abhängigkeit Quick
wurde so deklariert, dass diese Klasse kompiliert werden kann und das Include QQuickItem gefunden werden kann. Außerdem hat mymodule
keine Abhängigkeit von QtQuick.
Versuchen wir nun, myProperty
in einem Alias in QML zu verwenden. Das Programm läuft, aber die QML-Werkzeuge, wie z.B. der Compiler, werden sich über die Verwendung von myProperty
beschweren:
import mymodule MyCppObject { id: root property alias myAlias: root.myProperty // not ok: Cannot deduce type of alias [missing-type] }
Der Grund für die Warnmeldung ist, dass im QML-Code der Typ QQuickItem
von myProperty
und sein QML-Gegenstück Item
nicht bekannt sind, selbst wenn Sie import QtQuick
in Ihrer QML-Datei haben. Das liegt daran, dass derselbe Typ mehrfach mit unterschiedlichen Attributen in verschiedenen Modulen exponiert sein kann: mymodule
muss den QML-Typ von myProperty
genau kennen.
Um diese Warnung zu beheben, fügen Sie die Abhängigkeit in der CMakeLists.txt
hinzu:
qt_add_qml_module(mymodule URI mymodule ... # declarare QML dependency to QtQuick module DEPENDENCIES QtQuick ... )
Jetzt sollte die Warnung verschwunden sein!
Siehe auch Deklaration von Modul-Abhängigkeiten.
Kein Typ für Eigenschaft gefunden
Was ist passiert?
Es wurde eine Bindung an eine Eigenschaft gesetzt, deren QML-Typ nicht gefunden wurde. Dies kann durch ein QML-Modul verursacht werden, das seine QML-Abhängigkeiten von anderen Modulen nicht deklariert.
Hinweis: Wenn Sie QML-Module mit externen Abhängigkeiten importieren, vergewissern Sie sich, dass diese tatsächlich installiert sind und dass ihre Module in einem Importpfad landen.
Die Warnung kann auch darauf hinweisen, dass der Typ der Eigenschaft kein QML-Gegenstück hat. Dem Eigenschaftstyp könnte zum Beispiel das Makro QML_ELEMENT fehlen. Siehe in diesem Fall Definieren von QML-Typen aus C++ oder Übersicht - Integration von QML und C++.
Warum ist das schlecht?
Das QML-Tooling ist nicht in der Lage, das QML-Gegenstück des C++-Typs zu finden: Der Compiler kann diese Eigenschaftsbindung nicht nach C++ und qmllint kompilieren und auch QML Language Server kann diese Eigenschaftsbindung nicht analysieren.
Beispiel
Nehmen wir an, unser QML-Modul hat eine C++-Klasse mit zwei Eigenschaften, myProperty
und myProperty2
:
#include <QQuickItem> #include <QtQml/qqmlregistration.h> #include <QObject> class MyCppObject : public QObject { Q_OBJECT QML_ELEMENT public: MyCppObject(QObject *parent = nullptr) : QObject(parent) {} Q_PROPERTY(QQuickItem *myProperty READ myProperty WRITE setMyProperty NOTIFY notifyMyProperty) QQuickItem *myProperty() { return m_myProperty; } void setMyProperty(QQuickItem *item) { emit notifyMyProperty(); m_myProperty = item; } Q_PROPERTY(QQuickItem *myProperty2 READ myProperty2 WRITE setMyProperty2 NOTIFY notifyMyProperty2) QQuickItem *myProperty2() { return m_myProperty2; } void setMyProperty2(QQuickItem *item) { emit notifyMyProperty2(); m_myProperty2 = item; } private: QQuickItem *m_myProperty; QQuickItem *m_myProperty2; signals: void notifyMyProperty(); void notifyMyProperty2(); };
mit folgender CMakeLists.txt
:
project(mymodule VERSION 0.1 LANGUAGES CXX) set(CMAKE_CXX_STANDARD_REQUIRED ON) find_package(Qt6 6.5 REQUIRED COMPONENTS Quick) qt_standard_project_setup(REQUIRES 6.5) qt_add_executable(appmymodule main.cpp ) qt_add_qml_module(appmymodule URI mymodule VERSION 1.0 QML_FILES Main.qml HelloWorld.qml SOURCES mycppobject.cpp mycppobject.h ) target_link_libraries(appmymodule PRIVATE Qt6::Quick )
Die C++-Abhängigkeit Quick
wurde deklariert, so dass diese Klasse kompiliert werden kann und das Include QQuickItem gefunden werden kann. Außerdem hat mymodule
keine Abhängigkeit von QtQuick.
Versuchen wir nun, myProperty2
über einen Alias in QML an myProperty
zu binden. Das Programm läuft, aber die QML-Werkzeuge, wie z.B. der Compiler, werden sich über die Verwendung von myProperty
beschweren:
import mymodule MyCppObject { id: root myProperty: myProperty2 // not ok: No type found for property "myProperty". [missing-type] }
Der Grund für die Warnmeldung ist, dass im QML-Code der Typ QQuickItem
von myProperty
und sein QML-Gegenstück Item
nicht bekannt sind: Die Abhängigkeit 'QtQuick' von mymodule wurde nicht in CMakeLists.txt
deklariert.
Um diese Warnung zu beheben, fügen Sie die Abhängigkeit in CMakeLists.txt
hinzu:
qt_add_qml_module(mymodule URI mymodule ... # declarare QML dependency to QtQuick module DEPENDENCIES QtQuick ... )
Jetzt sollte die Warnung verschwunden sein!
Siehe auch Deklaration von Modulabhängigkeiten.
© 2025 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.