누락된 유형
이 경고 카테고리의 철자는 [missing-type]
입니다.
별칭 유형을 추론할 수 없습니다.
무슨 일인가요?
별칭 프로퍼티는 QML 대응하는 프로퍼티를 찾을 수 없는 C++ 유형의 프로퍼티를 가리킵니다. 이 문제는 다른 모듈에 대한 QML 종속성을 선언하지 않은 QML 모듈을 가져올 때 발생할 수 있습니다.
참고: 외부 종속성이 있는 QML 모듈을 가져오는 경우 해당 모듈이 실제로 설치되어 있는지, 그리고 해당 모듈이 가져오기 경로에 있는지 확인하세요.
별칭이 참조하는 속성 유형에 QML 대응하는 유형이 없다는 경고가 표시될 수도 있습니다. 예를 들어 참조된 속성 유형에 QML_ELEMENT 매크로가 누락되어 있을 수 있습니다. 이 경우에는 C++ 또는 개요에서 QML 유형 정의하기 - QML과 C++ 통합을 참조하세요.
왜 이런 문제가 발생하나요?
컴파일러가 이 속성 별칭을 C++로 컴파일할 수 없기 때문에 QML 툴링이 C++ 유형의 QML 대응을 찾을 수 없고 QML Language Server 는 이 속성 별칭을 분석할 수 없습니다.
예제
QML 모듈에 프로퍼티가 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(); };
다음과 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 )
C++ 종속성 Quick
이 클래스가 컴파일될 수 있고 QQuickItem 포함을 찾을 수 있도록 선언되었습니다. 또한 mymodule
에는 QtQuick 에 대한 종속성이 없습니다.
이제 QML에서 별칭으로 myProperty
을 사용해 보겠습니다. 프로그램은 실행되지만 컴파일러와 같은 QML 도구는 myProperty
의 사용에 대해 불평할 것입니다:
import mymodule MyCppObject { id: root property alias myAlias: root.myProperty // not ok: Cannot deduce type of alias [missing-type] }
경고 메시지가 표시되는 이유는 QML 파일에 import QtQuick
이 있더라도 QML 코드에서 myProperty
의 QQuickItem
유형과 그에 대응하는 Item
유형을 알 수 없기 때문입니다. 이는 동일한 유형이 다른 모듈에서 다른 속성으로 여러 번 노출될 수 있기 때문입니다. mymodule
은 실제로 myProperty
의 QML 유형을 정확히 알아야 합니다.
이 경고를 수정하려면 CMakeLists.txt
에 종속성을 추가하세요:
qt_add_qml_module(mymodule URI mymodule ... # declarare QML dependency to QtQuick module DEPENDENCIES QtQuick ... )
이제 경고가 사라집니다!
모듈 종속성 선언하기도참조하세요.
속성에 대한 유형을 찾을 수 없습니다.
무슨 일이 있었나요?
QML 유형을 찾을 수 없는 프로퍼티에 바인딩이 설정되었습니다. 이는 다른 모듈에 대한 QML 종속성을 선언하지 않은 QML 모듈로 인해 발생할 수 있습니다.
참고: 외부 종속성이 있는 QML 모듈을 가져오는 경우 해당 모듈이 실제로 설치되어 있는지, 그리고 해당 모듈이 가져오기 경로에 있는지 확인하세요.
이 경고는 속성 유형에 QML 대응하는 유형이 없다는 것을 나타낼 수도 있습니다. 예를 들어 속성 유형에 QML_ELEMENT 매크로가 누락되었을 수 있습니다. 이 경우 C++ 또는 개요에서 QML 유형 정의하기 - QML과 C++ 통합을 참조하세요.
이것이 왜 나쁜가요?
컴파일러가 이 프로퍼티 바인딩을 C++로 컴파일할 수 없기 때문입니다. QML Language Server 는 이 속성 바인딩을 분석할 수 없습니다.
예제
QML 모듈에 myProperty
와 myProperty2
라는 두 개의 프로퍼티가 있는 C++ 클래스가 있다고 가정해 보겠습니다:
#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(); };
다음 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 )
C++ 종속성 Quick
이 클래스가 컴파일될 수 있고 QQuickItem 포함을 찾을 수 있도록 선언되었습니다. 또한 mymodule
에는 QtQuick 에 대한 종속성이 없습니다.
이제 QML에서 별칭으로 myProperty2
을 myProperty
에 바인딩해 보겠습니다. 프로그램은 실행되지만 컴파일러와 같은 QML 도구는 myProperty
의 사용에 대해 불평할 것입니다:
import mymodule MyCppObject { id: root myProperty: myProperty2 // not ok: No type found for property "myProperty". [missing-type] }
경고 메시지가 표시되는 이유는 QML 코드에서 myProperty
의 QQuickItem
유형과 그에 대응하는 QML Item
을 알 수 없기 때문입니다: mymodule의 의존성 'QtQuick' 이 CMakeLists.txt
에 선언되지 않았기 때문입니다.
이 경고를 수정하려면 CMakeLists.txt
에 종속성을 추가하세요:
qt_add_qml_module(mymodule URI mymodule ... # declarare QML dependency to QtQuick module DEPENDENCIES QtQuick ... )
이제 경고가 사라집니다!
모듈 종속성 선언하기를참조하세요.
© 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.