누락된 유형
qmllint에서는 이 경고 범주를 ‘ [missing-type] ’로 표기합니다.
별칭의 유형을 추론할 수 없음
무슨 일이 발생했나요?
별칭 속성이 C++ 유형을 가진 속성을 가리키지만, 해당 QML 대응 속성이 발견되지 않았습니다. 이는 다른 모듈에 대한 QML 종속성을 선언하지 않은 QML 모듈을 임포트한 것이 원인일 수 있습니다.
참고: 외부 의존성이 있는 QML 모듈을 가져오는경우 , 해당 모듈이 실제로 설치되어 있는지, 그리고 해당 모듈이 가져오기 경로에 포함되어 있는지 확인하십시오.
또한 이 경고는 별칭이 참조하는 속성의 유형에 해당하는 QML 대응 유형이 없음을 나타낼 수도 있습니다. 예를 들어, 참조되는 속성 유형에 ` QML_ELEMENT ` 매크로가 누락되었을 수 있습니다. 이 경우 C++에서 QML 유형 정의 또는 개요 - QML 및 C++ 통합을 참조하십시오.
이것이 왜 문제일까요?
QML 툴링이 C++ 유형에 해당하는 QML 대응 유형을 찾을 수 없습니다. 즉, 컴파일러 는 이 속성 별칭을 C++로 컴파일할 수 없으며, qmllint 역시 QML Language Server 이 속성 별칭을 분석할 수 없습니다.
예시
QML 모듈에 myProperty 속성을 가진 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; }
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
)Quick 라는 C++ 의존성이 선언되어 있어, 이 클래스를 컴파일할 수 있고 QQuickItem 헤더 파일을 찾을 수 있습니다. 또한, mymodule 에는 Qt Quick.
이제 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 와 그에 대응하는 QML 타입인 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++ 통합을 참조하십시오.
이것이 왜 문제가 될까요?
QML 툴링이 해당 C++ 유형에 해당하는 QML 대응 유형을 찾을 수 없습니다. 즉, 컴파일러는 이 속성 바인딩을 C++로 컴파일할 수 없으며, qmllint 역시 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 에는 Qt Quick.
이제 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 이 인식되지 않기 때문입니다. 즉, CMakeLists.txt 에서 mymodule의 QtQuick 의존성이 선언되지 않았기 때문입니다.
이 경고를 해결하려면 CMakeLists.txt 파일에 다음 종속성을 추가하십시오:
qt_add_qml_module(mymodule
URI mymodule
...
# declarare QML dependency to QtQuick module
DEPENDENCIES QtQuick
...
)이제 경고가 사라졌을 것입니다!
‘모듈 의존성 선언’항목도 참조하십시오.
© 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.