未解决的类型
该类别包含以下警告:
- 类型已使用但未解决
- 未找到方法返回类型的类型
- 未找到方法中参数类型的类型
- 属性类型不完整;可能缺少一个导入项
- 未找到属性类型;这可能是由于缺少依赖项或未以声明方式暴露类型
- 属性类型未完全解析;这可能是由于缺少依赖项或未以声明方式公开类型。
- 在命名空间中找不到类型
这些警告通常表示导入缺失或 QML 模块有问题,这取决于你是在使用还是在编写 QML 模块。
该警告类别由 qmllint 拼写为[unresolved-type]
。
针对 QML 模块用户
发生了什么事?
您使用了 QML 工具找不到的类型。这通常表示潜在的错字、导入丢失或导入路径设置不当。
为什么会这样?
QML 工具找不到该类型,QML 引擎也很可能找不到。
示例
错字
import QtQuick Itme { ... }
要修复此警告,请更正错字:
import QtQuick Item { ... }
缺少导入语句
Item { ... }
要修复此警告,请导入公开Item
的模块:
import QtQuick Item { ... }
如果添加导入语句无效,请查看导入路径。
如果您通过QML Language Server 收到此警告,您的设置可能不完整。
针对 QML 模块作者
发生了什么事?
QML 工具在你的 QML 模块中找不到一个类型。这可能是你直接或间接暴露给 QML 的类型:
- 基本类型
- 属性类型
- 信号、槽或
Q_INVOKABLE
参数类型 Q_INVOKABLE
返回类型
如果你的模块暴露了未解决的类型,你可能缺少一个声明性的类型注册。
否则,你的 QML 模块可能与暴露未解决类型的 QML 模块有未声明的依赖关系。
这为什么不好?
QML 工具将无法在你的类型上工作,你 QML 模块的用户将收到无法修复的虚假警告。
示例
缺少类型注册
请参阅Defining QML Types from C++了解如何声明注册类型。确保所有直接或间接暴露给 QML 的类型和枚举都已注册。
缺少 QML 模块依赖
让MyItem
成为 QML 模块中的 C++ 类型:
class MyItem: public QQuickItem { ... QML_ELEMENT ... Q_PROPERTY(SomeType someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged) ... }
如果 QML 工具不能先解析QQuickItem
或SomeType
,它就不能正确解析MyItem
。如果QQuickItem
Live 在QtQuick
QML 模块中,SomeType
Live 在SomeModule
中,那么您需要在 QML 模块定义中说明这些 C++ 依赖关系。
为此,可将依赖关系添加到 QML 模块定义中。例如,可通过DEPENDENCIES
来实现:
qt_add_qml_module( ... DEPENDENCIES QtQuick # for QQuickItem to be resolved SomeModule # for SomeType to be resolved )
更多信息,请参阅QML 模块之间的 C++ 依赖关系声明。
© 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.