欠落しているタイプ
この警告カテゴリのスペルは[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 )
このクラスがコンパイル可能で、QQuickItem インクルードが見つかるように、C++ 依存関係Quick
が宣言されています。また、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
と、その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
の2つのプロパティを持つ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.