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.