Auf dieser Seite

Fehlender Typ

Diese Warnkategorie wird von qmllint als „ [missing-type] “ bezeichnet.

Typ des Alias kann nicht abgeleitet werden

Was ist passiert?

Eine Alias-Eigenschaft verweist auf eine Eigenschaft mit einem C++-Typ, deren QML-Entsprechung nicht gefunden wurde. Dies kann dadurch verursacht werden, dass ein QML-Modul importiert wird, das seine QML-Abhängigkeiten von anderen Modulen nicht deklariert.

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 Typ der vom Alias referenzierten Eigenschaft kein QML-Äquivalent hat. Dem referenzierten Eigenschaftstyp 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 ein Problem?

Die QML-Tools können das QML-Äquivalent des C++-Typs nicht finden: Der Compiler kann diesen Eigenschaftsalias nicht in C++ kompilieren, und qmllint kann QML Language Server diesen Eigenschaftsalias nicht analysieren.

Beispiel

Nehmen wir an, unser QML-Modul enthält 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 folgendem „ 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 die Include-Datei „ QQuickItem “ gefunden wird. Außerdem hat „ mymodule “ keine QML-Abhängigkeit zu Qt Quick.

Versuchen wir nun, ` myProperty ` in einem Alias in QML zu verwenden. Das Programm läuft zwar, aber QML-Tools wie beispielsweise der Compiler melden eine Fehlermeldung bezüglich der Verwendung von ` myProperty`:

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. Dies liegt daran, dass derselbe Typ mehrfach mit unterschiedlichen Attributen in verschiedenen Modulen exponiert werden kann: „ mymodule “ muss tatsächlich den QML-Typ von „ myProperty “ genau angeben.

Um diese Warnung zu beheben, fügen Sie die Abhängigkeit in der Datei „ CMakeLists.txt “ hinzu:

qt_add_qml_module(mymodule
    URI mymodule
    ...
    # declarare QML dependency to QtQuick module
    DEPENDENCIES QtQuick
    ...
)

Nun sollte die Warnung verschwunden sein!

Siehe auch „Modulabhängigkeiten deklarieren“.

Kein Typ für Eigenschaft gefunden

Was ist passiert?

Es wurde eine Bindung für eine Eigenschaft festgelegt, deren QML-Typ nicht gefunden wurde. Dies kann durch ein QML-Modul verursacht werden, das seine QML-Abhängigkeiten zu anderen Modulen nicht deklariert.

Hinweis: Wenn Sie QML-Module mit externen Abhängigkeiten importieren, stellen Sie sicher, dass diese tatsächlich installiert sind und dass sich die entsprechenden Module in einem Importpfad befinden.

Die Warnung kann auch darauf hinweisen, dass der Typ der Eigenschaft kein QML-Äquivalent hat. Dem Eigenschaftstyp 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?

Die QML-Tools können das QML-Äquivalent des C++-Typs nicht finden: Der Compiler kann diese Eigenschaftsbindung weder in C++ noch mit qmllint kompilieren, und QML Language Server diese Eigenschaftsbindung nicht analysieren.

Beispiel

Nehmen wir an, unser QML-Modul enthält 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 folgendem ` 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, sodass diese Klasse kompiliert werden kann und der Include ` QQuickItem ` gefunden werden kann. Außerdem hat ` mymodule ` keine QML-Abhängigkeit von Qt Quick.

Versuchen wir nun, „ myProperty2 “ in QML über einen Alias an „ myProperty “ zu binden. Das Programm läuft zwar, aber QML-Tools wie beispielsweise der Compiler melden eine Fehlermeldung bezüglich der Verwendung von „ myProperty “:

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 in der Datei ` CMakeLists.txt` nicht deklariert.

Um diese Warnung zu beheben, fügen Sie die Abhängigkeit in der Datei „ CMakeLists.txt “ hinzu:

qt_add_qml_module(mymodule
    URI mymodule
    ...
    # declarare QML dependency to QtQuick module
    DEPENDENCIES QtQuick
    ...
)

Nun sollte die Warnung verschwunden sein!

Siehe auch „Modulabhängigkeiten deklarieren“.

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