Unresolved type
This category contains following warnings:
- Type is used but is not resolved
- Type was not found for the return type of method
- Type was not found for the type of parameter in method
- Property has incomplete type; You may be missing an import
- Type of property not found; This is likely due to a missing dependency entry or a type not being exposed declaratively
- Type of property not fully resolved; This is likely due to a missing dependency entry or a type not being exposed declaratively
- Type not found in namespace
These warnings usually indicate missing imports or faulty QML modules, depending on whether you are using or writing a QML module.
This warning category is spelled [unresolved-type]
by qmllint.
For QML module users
What happened?
You used a type that was not found by QML tooling. It usually indicates a potential typo, a missing import, or improperly set up import paths.
Why is this bad?
The type can't be found by QML tooling, and most likely not by the QML engine.
Examples
Typo
import QtQuick Itme { ... }
To fix this warning, correct the typo:
import QtQuick Item { ... }
Missing import statement
Item { ... }
To fix this warning, import the module that exposes Item
:
import QtQuick Item { ... }
If adding the import statement does not help, take a look at your import paths.
If you get this warning via QML Language Server, your setup might be incomplete.
For QML module authors
What happened?
The QML tooling can't find a type in your QML module. It can be a type that you expose to QML directly or indirectly by using it as a:
- Base type
- Property type
- Signal, slot, or
Q_INVOKABLE
parameter type Q_INVOKABLE
return type
You might be missing a declarative type registration if the unresolved type is exposed by your module.
Otherwise, your QML module might have undeclared dependencies to the QML module exposing the unresolved type.
Why is this bad?
The QML tooling will not work on your types and users of your QML module will get spurious warnings that they can't fix.
Examples
Missing type registration
Refer to Defining QML Types from C++ on how to register your types declaratively. Make sure that all types and enums exposed directly and indirectly to QML are registered.
Missing QML module dependency
Let MyItem
be a C++ type in your QML module:
class MyItem: public QQuickItem { ... QML_ELEMENT ... Q_PROPERTY(SomeType someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged) ... }
The QML tooling can't resolve MyItem
correctly if it can't resolve QQuickItem
or SomeType
first. If QQuickItem
lives in the QtQuick
QML module and SomeType
in SomeModule
, then you need to state these C++ dependencies in the QML module definition.
To achieve that, add the dependencies to the QML module definition. This can be done with DEPENDENCIES
, for example:
qt_add_qml_module( ... DEPENDENCIES QtQuick # for QQuickItem to be resolved SomeModule # for SomeType to be resolved )
Refer to declaring C++ dependencies between QML modules for more information.