缺少类型
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
)已声明 C++ 依赖项 `Quick `,因此该类可以编译,且能找到 `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 代码中,即使您的 QML 文件中已包含import QtQuick ,系统仍无法识别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 模块中有一个 C++ 类,该类包含两个属性:myProperty 和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();
};其中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 没有任何 QML 依赖项指向 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 均未被识别:mymodule 的依赖项QtQuick 未在CMakeLists.txt 中声明。
要解决此警告,请在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.