Sur cette page

Type manquant

Cette catégorie d'avertissement est orthographiée « [missing-type] » par qmllint.

Impossible de déduire le type d’un alias

Que s'est-il passé ?

Une propriété d'alias pointe vers une propriété de type C++ dont l'équivalent QML n'a pas été trouvé. Cela peut être dû à l'importation d'un module QML qui ne déclare pas ses dépendances QML vis-à-vis d'autres modules.

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 dans un chemin d’importation.

L'avertissement peut également indiquer que le type de la propriété référencée par l'alias n'a pas d'équivalent en QML. Il se peut, par exemple, que le type de la propriété référencée ne dispose pas de la macro « QML_ELEMENT ». Dans ce cas, reportez-vous aux sections « Définition de types QML à partir de C++ » ou « Présentation – Intégration de QML et C++ ».

Pourquoi est-ce un problème ?

Les outils QML ne parviennent pas à trouver l’équivalent QML du type C++ : le compilateur ne peut pas compiler cet alias de propriété en C++ et qmllint QML Language Server ne peut pas analyser cet alias de propriété.

Exemple

Supposons que notre module QML comporte une classe C++ avec une propriété 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();
};

avec l’ CMakeLists.txt suivante :

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
)

La dépendance C++ Quick a été déclarée, de sorte que cette classe puisse être compilée et que l’inclusion QQuickItem puisse être trouvée. De plus, mymodule ne présente aucune dépendance QML vis-à-vis de Qt Quick.

Essayons maintenant d’utiliser myProperty dans un alias en QML. Le programme s’exécutera, mais les outils QML, comme le compilateur par exemple, signaleront une erreur concernant l’utilisation de myProperty:

import mymodule

MyCppObject {
    id: root

    property alias myAlias: root.myProperty // not ok: Cannot deduce type of alias [missing-type]
}

La raison de ce message d’avertissement est que, dans le code QML, le type QQuickItem de myProperty et son équivalent QML Item ne sont pas reconnus, même si vous avez inclus import QtQuick dans votre fichier QML. En effet, un même type peut être exposé plusieurs fois avec des attributs différents dans des modules différents : mymodule doit en réalité préciser le type QML de myProperty.

Pour corriger cet avertissement, ajoutez la dépendance dans le fichier CMakeLists.txt:

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

L’avertissement devrait désormais avoir disparu !

Voir aussi Déclaration des dépendances de module.

Aucun type trouvé pour la propriété

Que s’est-il passé ?

Une liaison a été définie sur une propriété dont le type QML n'a pas été trouvé. Cela peut être dû à un module QML qui ne déclare pas ses dépendances QML vis-à-vis d'autres modules.

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 la propriété n'a pas d'équivalent en QML. Il se peut, par exemple, que la macro QML_ELEMENT soit absente du type de propriété. Dans ce cas, reportez-vous aux sections Définition de types QML depuis C++ ou Présentation - Intégration de QML et C++.

Pourquoi est-ce un problème ?

Les outils QML ne parviennent pas à trouver l’équivalent QML du type C++ : le compilateur ne peut pas compiler cette liaison de propriété en C++ et qmllint ne peut pas non plus QML Language Server ne peut pas analyser cette liaison de propriété.

Exemple

Supposons que notre module QML comporte une classe C++ avec deux propriétés, ` myProperty ` et ` 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();
};

avec l'en-tête CMakeLists.txt suivant :

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
)

La dépendance C++ Quick a été déclarée, de sorte que cette classe puisse être compilée et que l’inclusion QQuickItem puisse être trouvée. De plus, mymodule ne possède aucune dépendance QML vis-à-vis de Qt Quick.

Essayons maintenant de lier myProperty2 à myProperty via un alias en QML. Le programme s’exécutera, mais les outils QML, comme le compilateur par exemple, signaleront une erreur concernant l’utilisation de myProperty:

import mymodule

MyCppObject {
    id: root

    myProperty: myProperty2 // not ok: No type found for property "myProperty". [missing-type]
}

La raison de ce message d’avertissement est que, dans le code QML, le type QQuickItem de myProperty 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.

Pour corriger cet avertissement, ajoutez la dépendance dans le fichier CMakeLists.txt:

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

L'avertissement devrait désormais avoir disparu !

Voir aussi 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.