<qqml.h> - Functions to register C++ types to QML

Header: #include <qqml.h>

種類

enum QQmlModuleImportSpecialVersions { QQmlModuleImportModuleAny, QQmlModuleImportLatest, QQmlModuleImportAuto }

関数

QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool createIfMissing = true)
void qmlClearTypeRegistrations()
QObject *qmlExtendedObject(QObject *base)
bool qmlProtectModule(const char *uri, int majVersion)
int qmlRegisterAnonymousType(const char *uri, int versionMajor)
int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)
void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)
void qmlRegisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor = QQmlModuleImportLatest, int importMinor = QQmlModuleImportLatest)
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)
int qmlRegisterSingletonInstance(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *cppObject)
int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<QJSValue (QQmlEngine *, QJSEngine *)> callback)
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)
int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)
int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)
int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)
int qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName)
void qmlUnregisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor = QQmlModuleImportLatest, int importMinor = QQmlModuleImportLatest)

マクロ

詳細な説明

このヘッダーは、C++ 型を QML に登録するための関数のコレクションを提供します。

関連項目: 概要 - QML と C++ の統合、qqmlintegration.h 、およびqmltyperegistrar。

型のドキュメント

enum QQmlModuleImportSpecialVersions

qmlRegisterModuleImport() およびqmlUnregisterModuleImport() の version 引数に渡すことのできる、いくつかの特別な値を定義します。

定数値説明
QQmlModuleImportModuleAny-1ベースモジュールの majorVersion として渡された場合、そのインポートはモジュールのどのバージョンにも適用されることを意味します。
QQmlModuleImportLatest-1インポートされるモジュールのメジャーバージョンまたはマイナーバージョンとして渡された場合、そのモジュールの最新の全体バージョン、または指定されたメジャーバージョンの最新のマイナーバージョンがインポートされることを意味します。
QQmlModuleImportAuto-2インポートされるモジュールのメジャーバージョンとして渡された場合、ベースモジュールのバージョンが引き継がれることを意味します。

関数のドキュメント

template <typename T> QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool createIfMissing = true)

このテンプレート関数の型は次のとおりです。

template<typename T> QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool createIfMissing = true)

これは、アタッチメント型T によって指定された `attachee ` にアタッチされたオブジェクトインスタンスを返します。

attachee がnullptr の場合、nullptr を返します。

型Tの既存のアタッチされたオブジェクトインスタンスが存在する場合、それを返します。そうでない場合、createIfMissing が `true ` であり、T が有効なアタッチ型である場合は新しく作成されたインスタンスを返し、そうでない場合は `nullptr ` を返します。

QML_ATTACHED() および「アタッチされたプロパティの提供」も参照してください 。

void qmlClearTypeRegistrations()

qmlRegisterType() などで生成されたものを含め、保存されているすべての型登録をクリアします。

警告: QQmlEngine が存在している状態でこの関数を呼び出さないでください 。そうすると、動作が未定義になります。この関数を呼び出す前に、既存のQQmlEnginesをすべて削除する必要があります。

この関数は、アプリケーションのグローバルキャッシュにのみ影響します。そのエンジンに関連するすべてのキャッシュデータをクリアするには、QQmlEngine を削除してください。

QObject *qmlExtendedObject(QObject *base)

この関数は、base に属する拡張オブジェクトが存在する場合、それを返します。存在しない場合は、nullptr を返します。

QML_EXTENDEDも参照してください 。

bool qmlProtectModule(const char *uri, int majVersion)

この関数は、モジュールがそれ以上変更されないように保護します。これにより、他のプラグインが自分のモジュールに型を注入するのを防ぐことができます。また、このインポートに到達した際に、エンジンが新しい型やプラグインの存在チェックをスキップできるようになるため、パフォーマンスの向上にもつながります。

qmlProtectModule が一度呼び出されると、QML エンジンはモジュールをロードするために新しい `qmldir ` ファイルを検索しなくなります。ただし、以前にロードした `qmldir ` ファイルは再利用されます。 したがって、この時点で存在するタイプは引き続き機能します。QMLエンジンによって読み込まれるモジュールが異なる場合がある点に注意してください。ただし、モジュールの保護はグローバルであり、すべてのエンジンに影響します。ファイルシステムの処理速度が遅い場合、qmldir ファイルの検索やプラグインの読み込みにかかるオーバーヘッドが顕著になる可能性があります。 したがって、そのモジュールを今後読み込む必要がなくなったと確信した時点でモジュールを保護することは、有効な最適化策となります。また、モジュールロックはプラグインだけでなく、import やprefer といったその他のqmldirディレクティブ、およびqmldir ファイル内で宣言された複合型やスクリプトにも影響を及ぼす点に注意してください。

さらに、この関数が呼び出された後、この URI とメジャーバージョンの組み合わせに対して C++ 型を登録しようとすると、実行時エラーが発生します。

モジュール識別子が uri 、メジャーバージョン番号がmajVersion であるモジュールが見つかり、ロックされた場合は true を返し、そうでない場合は false を返します。モジュールが見つかるためには、そのモジュールにエクスポートされた型が含まれている必要があります。

template <typename T> int qmlRegisterAnonymousType(const char *uri, int versionMajor)

このテンプレート関数は、C++ 型を QML システムに匿名型として登録します。結果として生成される QML 型には名前がありません。そのため、QML システムからこの型のインスタンスを作成することはできません。ただし、その型が他の型のプロパティとして公開されている場合は、そのインスタンスにアクセスすることができます。

この関数は、型が名前で参照されない場合、具体的にはプロパティバインディングの左辺で使用される C++ 型に対して使用します。型がどのモジュールに属するかを指定するには、uri およびversionMajor を使用します。

たとえば、次の2つのクラスを考えてみましょう。

class Bar : public QObject
{
    Q_OBJECT
    Q_PROPERTY(QString baz READ baz WRITE setBaz NOTIFY bazChanged)

public:
    Bar() {}

    QString baz() const { return mBaz; }

    void setBaz(const QString &baz)
    {
        if (baz == mBaz)
            return;

        mBaz = baz;
        emit bazChanged();
    }

signals:
    void bazChanged();

private:
    QString mBaz;
};

class Foo : public QObject
{
    Q_OBJECT
    Q_PROPERTY(Bar *bar READ bar CONSTANT FINAL)

public:
    Foo() {}

    Bar *bar() { return &mBar; }

private:
    Bar mBar;
};

QML では、`bar` の `baz ` プロパティに文字列を代入します:

Foo {
    bar.baz: "abc"
    Component.onCompleted: print(bar.baz)
}

QMLエンジンが、Bar 型にbaz プロパティがあることを認識できるようにするには、Bar を登録する必要があります:

qmlRegisterType<Foo>("App", 1, 0, "Foo");
qmlRegisterAnonymousType<Bar>("App", 1);

Foo 型はQML内でインスタンス化されるため、要素名を受け取るqmlRegisterType()のバージョンに登録する必要があります。

QML 型の ID を返します。

「 QML_ANONYMOUS 」 および「C++とQML間の適切な統合方法の選択」も参照してください 。

template <typename T, typename E> int qmlRegisterExtendedType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)

このテンプレート関数は、C++ 型とその拡張オブジェクトを、QML システムに「qmlName 」という名前で登録します。登録先は、uri からインポートされたライブラリであり、バージョン番号はversionMajor およびversionMinor から構成されます。メインの型で利用できないプロパティは、拡張オブジェクト内で検索されます。

QML タイプ ID を返します。

QML_EXTENDED()、qmlRegisterType()、および「拡張オブジェクトの登録」も参照してください 。

template <typename T, typename E> int qmlRegisterExtendedUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)

このテンプレート関数は、C++の型とその拡張機能を、QMLシステムに「qmlName 」という名前で登録します。これは、uri からインポートされたライブラリ内にあり、バージョン番号はversionMajor およびversionMinor から構成されます。

この型には名前と型が設定されていますが、インスタンスを作成することはできません。ユーザーがこの型のインスタンスを作成しようとすると、指定されたreason を含むエラーメッセージが表示されます。

これは、その型が、アタッチドプロパティ、列挙値、またはその拡張機能を持つ抽象基底クラスを提供するのみを目的としている場合に有用です。

QML タイプ ID を返します。

QML_EXTENDED()、QML_UNCREATABLE()、およびqmlRegisterUncreatableType()も参照してください 。

void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)

この関数は、特定のuri に、versionMajor およびversionMinor で指定されたバージョンのモジュールを登録します。

これにより、そのバージョンに対して型が登録されていなくても、特定のモジュールバージョンを利用可能にすることができます。これは、関連するモジュールのバージョンを同期させる上で特に有用です。

void qmlRegisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor = QQmlModuleImportLatest, int importMinor = QQmlModuleImportLatest)

メジャーバージョンmoduleMajor のモジュールuri に対して qmldir-import を登録します。

これは、qmldir ファイル内の `import ` ステートメントと同じ効果を持ちます。バージョン `moduleMajor ` の `uri ` がインポートされるたびに、バージョン `importMajor` の `import ` が自動的にインポートされます。importMinor も同様に自動的にインポートされます。importMajor が `QQmlModuleImportLatest ` の場合、そのモジュールの利用可能な最新バージョンがインポートされ、importMinor は関係ありません。importMinor が `QQmlModuleImportLatest ` の場合、importMajor の最新のマイナーバージョンが選択されます。importMajor が `QQmlModuleImportAuto ` の場合、import のバージョンはインポートされる `uri ` のバージョンと同じになり、importMinor は関係ありません。moduleMajor がQQmlModuleImportModuleAny の場合、モジュールのインポートはuri のどのメジャーバージョンに対しても適用されます。例えば、MyModuleのどのバージョンがインポートされる場合でも、MyOtherModuleの最新バージョンをインポートするように指定できます。その場合、次のような呼び出しが適切です:

qmlRegisterModuleImport("MyModule", QQmlModuleImportModuleAny,
                        "MyOtherModule", QQmlModuleImportLatest);

あるいは、「MyModule」のメジャーバージョン 5 がインポートされるたびに、「MyOtherModule」のバージョン 3.14 がインポートされるように指定することもできます:

qmlRegisterModuleImport("MyModule", 5, "MyOtherModule", 3, 14);

最後に、「MyModule」がインポートされるたびに常に同じバージョンの「MyOtherModule」をインポートしたい場合は、次のように指定します:

qmlRegisterModuleImport("MyModule", QQmlModuleImportModuleAny,
                        "MyOtherModule", QQmlModuleImportAuto);

qmlUnregisterModuleImport()も参照してください 。

template <typename T, int metaObjectRevision> int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor)

このテンプレート関数は、QMLシステム内の指定されたリビジョンmetaObjectRevision において、C++型T を登録します。この際、uri からインポートされたライブラリを使用し、バージョン番号はversionMajor およびversionMinor から構成されます。

QML タイプ ID を返します。

template<typename T, int metaObjectRevision>
int qmlRegisterRevision(const char *uri, int versionMajor, int versionMinor);

この関数は通常、指定された型のバージョンで使用する基底クラスのリビジョンを登録するために使用されます(「型のリビジョンとバージョン」を参照)。

int qmlRegisterSingletonInstance(const char *uri, int versionMajor, int versionMinor, const char *typeName, QObject *cppObject)

この関数は、特定のuri およびtypeName を持つシングルトンオブジェクトcppObject を登録するために使用されます。そのバージョンは、versionMajor とversionMinor を組み合わせたものです。

URI にシングルトン型を登録することで、クライアントがその型の個々のインスタンスをインスタンス化する必要なく、QML コードに任意の機能(メソッドやプロパティ)を提供できるようになります。

この関数を使用すると、指定された型 T のオブジェクトをシングルトン型として登録できます。

QObject のシングルトン型は、登録された型名を通じて参照できます。また、この型名は、Connections 型のターゲットとして、あるいは他の型IDと同様に使用することができます。 ただし、1 つの例外があります。QObject のシングルトン型プロパティは、シングルトン型名が同じコンポーネント内の他のアイテムと同じオブジェクトを識別しないため、エイリアスを設定することはできません。

注: cppObject は 、それが使用されるQMLエンジンよりも長く存続する必要があります。さらに、cppObject はエンジンと同じスレッドアフィニティを持つ必要があります。複数のエンジンに対して個別のシングルトンインスタンスが必要な場合は、qmlRegisterSingletonType を使用する必要があります。スレッドセーフに関する詳細については、「スレッドとQObject」を参照してください。

注:qmlRegisterSingleton は、そのモジュールのすべての型が手続き的に登録されている場合にのみ使用できます。

使用方法:

// First, define your QObject which provides the functionality.
class SingletonTypeExample : public QObject
{
    Q_OBJECT
    Q_PROPERTY(int someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged)

public:
    explicit SingletonTypeExample(QObject* parent = nullptr) : QObject(parent) {}

    Q_INVOKABLE int doSomething()
    {
        setSomeProperty(5);
        return m_someProperty;
    }

    int someProperty() const { return m_someProperty; }
    void setSomeProperty(int val) {
        if (m_someProperty != val) {
            m_someProperty = val;
            emit somePropertyChanged(val);
        }
    }

signals:
    void somePropertyChanged(int newValue);

private:
    int m_someProperty = 0;
};
// Second, create an instance of the object

// allocate example before the engine to ensure that it outlives it
QScopedPointer<SingletonTypeExample> example(new SingletonTypeExample);
QQmlEngine engine;

// Third, register the singleton type provider with QML by calling this
// function in an initialization function.
qmlRegisterSingletonInstance("Qt.example.qobjectSingleton", 1, 0, "MyApi", example.get());

QMLで登録済みのシングルトン型を使用するには、対応するバージョンのURIをインポートする必要があります。

import QtQuick 2.0
import Qt.example.qobjectSingleton 1.0
Item {
    id: root
    property int someValue: MyApi.someProperty

    Component.onCompleted: {
        console.log(MyApi.doSomething())
    }
}

QML_SINGLETONおよびqmlRegisterSingletonTypeも参照してください 。

int qmlRegisterSingletonType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

この関数は、バージョン番号がversionMajor およびversionMinor から構成される、uri からインポートされたライブラリ内に、qmlName という名前のシングルトン型を登録するために使用できます。この型は、url にある QML ファイルによって定義されます。URL は絶対 URL である必要があります(つまり、url.isRelative() == false であること)。

さらに、この型の QML ファイルには、import ステートメントの中に pragma Singleton ステートメントが含まれている必要があります。

シングルトン型は、登録された型名を通じて参照することができ、この型名はConnections 型のターゲットとして、あるいは他の型IDと同様に使用することができます。 ただし、シングルトン型のプロパティにはエイリアスを設定できないという例外があります(シングルトン型名は、同じコンポーネント内の他の項目と同じオブジェクトを識別しないためです)。

使用方法:

// First, define your QML singleton type which provides the functionality.
pragma Singleton
import QtQuick 2.0
Item {
    property int testProp1: 125
}
// Second, register the QML singleton type by calling this function in an initialization function.
qmlRegisterSingletonType(QUrl("file:///absolute/path/SingletonType.qml"), "Qt.example.qobjectSingleton", 1, 0, "RegisteredSingleton");

QMLで登録済みのシングルトン型を使用するには、そのシングルトン型をインポートする必要があります。

import QtQuick 2.0
import Qt.example.qobjectSingleton 1.0
Item {
    id: root
    property int someValue: RegisteredSingleton.testProp1
}

また、qmlRegisterSingletonType関数を使用せずにQMLシングルトン型を登録することも可能です。これを行うには、その型のQMLファイルのインポート記述の中にpragma Singletonステートメントを追加します。 さらに、その型は qmldir ファイル内で singleton キーワードを指定して定義されている必要があり、その singleton を使用する QML ファイルからは、その qmldir をインポートする必要があります。

QML_SINGLETONも参照してください 。

int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<QJSValue (QQmlEngine *, QJSEngine *)> callback)

この関数は、特定のuri およびtypeName に、versionMajor およびversionMinor で指定されたバージョンのシングルトン型プロバイダcallback を登録するために使用できます。

シングルトン型をインストールすることで、開発者は、クライアントがその型の個々のインスタンスをインスタンス化する必要なしに、クライアントに任意の機能(メソッドやプロパティ)を提供できるようになります。

シングルトン型は、QObject またはQJSValue のいずれかです。この関数は、QJSValue をシングルトン型として返すシングルトン型プロバイダ関数を登録するために使用する必要があります。

注: QJSValue のシングルトン型プロパティは、変更されてもバインディングの再評価はトリガーされません。

使用方法:

// First, define the singleton type provider function (callback).
static QJSValue example_qjsvalue_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
    Q_UNUSED(engine)

    static int seedValue = 5;
    QJSValue example = scriptEngine->newObject();
    example.setProperty("someProperty", seedValue++);
    return example;
}

// Second, register the singleton type provider with QML by calling this function in an initialization function.
qmlRegisterSingletonType("Qt.example.qjsvalueApi", 1, 0, "MyApi", example_qjsvalue_singletontype_provider);

あるいは、C++11のラムダ式を使用することもできます:

qmlRegisterSingletonType("Qt.example.qjsvalueApi", 1, 0, "MyApi", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QJSValue {
    Q_UNUSED(engine)

    static int seedValue = 5;
    QJSValue example = scriptEngine->newObject();
    example.setProperty("someProperty", seedValue++);
    return example;
});

QMLで登録済みのシングルトン型を使用するには、そのシングルトン型をインポートする必要があります。

import QtQuick 2.0
import Qt.example.qjsvalueApi 1.0 as ExampleApi
Item {
    id: root
    property int someValue: ExampleApi.MyApi.someProperty
}

「QML_SINGLETON」および「C++とQML間の適切な統合方法の選択」も参照してください 。

template <typename T> int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<QObject *(QQmlEngine *, QJSEngine *)> callback)

この関数を使用すると、特定のuri およびtypeName に、versionMajor およびversionMinor で指定されたバージョンのシングルトン型プロバイダcallback を登録することができます。

URI にシングルトン型をインストールすることで、開発者は、クライアントがその型の個々のインスタンスをインスタンス化する必要なく、クライアントに任意の機能(メソッドやプロパティ)を提供できるようになります。

シングルトン型は、QObject またはQJSValue のいずれかです。この関数は、指定された型 T のQObject をシングルトン型として返すシングルトン型プロバイダ関数を登録するために使用します。

QObject のシングルトン型は、登録された型名を通じて参照することができ、この型名はConnections 型のターゲットとして、あるいは他の型IDと同様に使用することができます。ただし、QObject のシングルトン型プロパティにはエイリアスを設定できないという例外があります。

注:シングルトン型プロバイダから返されるQObject のシングルトン型インスタンスは、そのオブジェクトにQQmlEngine::CppOwnershipフラグが明示的に設定されていない限り、QMLエンジンによって所有されます。

使用方法:

// First, define your QObject which provides the functionality.
class SingletonTypeExample : public QObject
{
    Q_OBJECT
    Q_PROPERTY (int someProperty READ someProperty WRITE setSomeProperty NOTIFY somePropertyChanged)

public:
    SingletonTypeExample(QObject *parent = nullptr)
        : QObject(parent), m_someProperty(0)
    {
    }

    ~SingletonTypeExample() {}

    Q_INVOKABLE int doSomething() { setSomeProperty(5); return m_someProperty; }

    int someProperty() const { return m_someProperty; }
    void setSomeProperty(int val) { m_someProperty = val; emit somePropertyChanged(val); }

signals:
    void somePropertyChanged(int newValue);

private:
    int m_someProperty;
};

// Second, define the singleton type provider function (callback).
static QObject *example_qobject_singletontype_provider(QQmlEngine *engine, QJSEngine *scriptEngine)
{
    Q_UNUSED(engine)
    Q_UNUSED(scriptEngine)

    SingletonTypeExample *example = new SingletonTypeExample();
    return example;
}

// Third, register the singleton type provider with QML by calling this function in an initialization function.
qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 1, 0, "MyApi", example_qobject_singletontype_provider);

あるいは、C++11のラムダ式を使用することもできます:

qmlRegisterSingletonType<SingletonTypeExample>("Qt.example.qobjectSingleton", 1, 0, "MyApi", [](QQmlEngine *engine, QJSEngine *scriptEngine) -> QObject * {
    Q_UNUSED(engine)
    Q_UNUSED(scriptEngine)

    SingletonTypeExample *example = new SingletonTypeExample();
    return example;
});

QMLで登録済みのシングルトン型を使用するには、そのシングルトン型をインポートする必要があります。

import QtQuick 2.0
import Qt.example.qobjectSingleton 1.0
Item {
    id: root
    property int someValue: MyApi.someProperty

    Component.onCompleted: {
        someValue = MyApi.doSomething()
    }
}

関連項目: QML_SINGLETONおよびC++ と QML の間の適切な統合方法の選択。

template <typename T> int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName)

このテンプレート関数は、qmlName という名前で、uri からインポートされたライブラリ内に、versionMajor とversionMinor から構成されるバージョン番号を持つC++型をQMLシステムに登録します。

QML タイプ ID を返します。

このテンプレート関数には 2 つの形式があります。

template<typename T>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

template<typename T, int metaObjectRevision>
int qmlRegisterType(const char *uri, int versionMajor, int versionMinor, const char *qmlName);

前者は、型Tを新しい型として登録する標準形式です。後者は、クラスの特定の改訂版を指定されたバージョンとして登録することを可能にします(「型の改訂版とバージョン」を参照)。

たとえば、以下は C++ クラス `MySliderItem ` を、「com.mycompany.qmlcomponents」という名前空間のバージョン 1.0 向けの `Slider ` という名前の QML 型として登録します:

qmlRegisterType<MySliderItem>("com.mycompany.qmlcomponents", 1, 0, "Slider");

一度登録されると、指定された型ネームスペースとバージョン番号をインポートすることで、QML内でその型を使用できるようになります:

import com.mycompany.qmlcomponents 1.0

Slider {
    // ...
}

ライブラリが、そのライブラリの実際のバージョンよりも古いバージョンに対して型を登録することは、まったく妥当であることに注意してください。実際、一部の型のより高度なバージョンが利用可能であっても、新しいライブラリでは、以前のバージョン向けに記述されたQMLが引き続き動作するようにすることは一般的です。

QML_ELEMENT 、QML_NAMED_ELEMENT()、および「C++とQMLの適切な統合方法の選択」も参照してください 。

int qmlRegisterType(const QUrl &url, const char *uri, int versionMajor, int versionMinor, const char *qmlName)

この関数は、QMLシステムに「qmlName 」という名前の型を登録します。この型は、uri からインポートされたライブラリ内にあり、バージョン番号はversionMajor およびversionMinor から構成されます。この型は、url にあるQMLファイルによって定義されます。URLは絶対URLでなければなりません(つまり、url.isRelative() == false であること)。

通常、QML ファイルは他の QML ファイルから直接、あるいは qmldir ファイルを使用してタイプとして読み込むことができます。この関数を使用すると、起動時にタイプマッピングを手続き的に決定する必要がある場合など、C++ コードからファイルをタイプとして登録することができます。

登録に失敗した場合は -1 を返します。

int qmlRegisterTypeNotAvailable(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)

この関数は、qmlName という名前で、uri からインポートされた型名前空間内に、versionMajor とversionMinor から構成されるバージョン番号を持つ型をQMLシステムに登録しますが、この型をインスタンス化しようとすると、message というエラーが発生します。

通常、プラグインによってエクスポートされる型は確定している必要があります。ただし、C++ 型が利用できない場合は、少なくとも QML 型の名前を「予約」し、利用できない型のユーザーに対して意味のあるエラーメッセージを表示する必要があります。

QML 型の ID を返します。

例:

#ifdef NO_GAMES_ALLOWED
qmlRegisterTypeNotAvailable("MinehuntCore", 0, 1, "Game", "Get back to work, slacker!");
#else
qmlRegisterType<MinehuntGame>("MinehuntCore", 0, 1, "Game");
#endif

これにより、「MinehuntCore」型名前空間をインポートし、その型を使用しようとするQMLコードでは、次のようなエラーメッセージが表示されます:

fun.qml: Get back to work, slacker!
   Game {
   ^

これがない場合、一般的な「Game は型ではありません」というメッセージが表示されてしまいます。

関連項目: QML_UNAVAILABLE 、qmlRegisterUncreatableType()、および「C++とQML間の適切な統合方法の選択」を参照してください 。

int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)

この関数は、staticMetaObject とその拡張機能を、QMLシステムに「qmlName 」という名前で登録します。これは、uri からインポートされたライブラリ内にあり、バージョン番号はversionMajor およびversionMinor から構成されます。

メタオブジェクトのインスタンスを作成することはできません。ユーザーがインスタンスの作成を試みると、指定されたreason を含むエラーメッセージが表示されます。

この関数は、Q_NAMESPACE 名前空間を登録するのに役立ちます。

QML タイプ ID を返します。

例:

namespace MyNamespace {
  Q_NAMESPACE
  enum MyEnum {
      Key1,
      Key2,
  };
  Q_ENUM_NS(MyEnum)
}

//...
qmlRegisterUncreatableMetaObject(MyNamespace::staticMetaObject, "io.qt", 1, 0, "MyNamespace", "Access to enums & flags only");

QML側では、登録された列挙型を次のように使用できるようになります:

Component.onCompleted: console.log(MyNamespace.Key2)

QML_ELEMENT 、QML_NAMED_ELEMENT()、およびQML_UNCREATABLE()も参照してください 。

template <typename T> int qmlRegisterUncreatableType(const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &message)

このテンプレート関数は、C++ 型を QML システムに「qmlName 」という名前で登録します。この型は、uri からインポートされたライブラリ内にあり、バージョン番号はversionMajor とversionMinor から構成されます。

この型には名前と型がありますが、作成することはできず、作成を試みると「message 」というエラーが発生します。

これは、その型がアタッチドプロパティや列挙値を提供することのみを目的としている場合に有用です。

QML タイプ ID を返します。

QML_UNCREATABLE()、qmlRegisterTypeNotAvailable()、および「C++ と QML 間の適切な統合方法の選択」も参照してください 。

int qmlTypeId(const char *uri, int versionMajor, int versionMinor, const char *qmlName)

特定のuri でqmlName という名前で登録され、versionMajor およびversionMinor で指定されたバージョンのタイプのQMLタイプIDを返します。

この関数は、qmlRegisterType() やqmlRegisterSingletonType() といった QML 型登録関数と同じ値を返します。

qmlName 、uri 、およびversionMajor が登録済みの型と一致する場合でも、versionMinor で指定されたマイナーバージョンがそれよりも高い場合は、マイナーバージョンが最も近い型の ID が返されます。

一致するタイプが見つからなかった場合、または指定されたパラメータのいずれかが無効だった場合は、-1を返します。

注: ` qmlTypeId` は、 まだどのエンジンからもアクセスされていないモジュールであっても、そのモジュールを利用可能にしようと試みます。これにより、モジュールに初めてアクセスする際にオーバーヘッドが発生する可能性があります。存在しないモジュールから型を検索しようとすると、常にこのオーバーヘッドが発生します。

関連項目: QML_ELEMENT 、QML_NAMED_ELEMENT 、QML_SINGLETON、qmlRegisterType()、およびqmlRegisterSingletonType()。

void qmlUnregisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor = QQmlModuleImportLatest, int importMinor = QQmlModuleImportLatest)

qmlRegisterModuleImport() で以前に登録されたモジュールのインポートを削除します

この関数を呼び出すと、バージョンimportMajor の `import ` および `importMinor ` が、バージョンmoduleMajor の `uri ` がインポートされた際に自動的にインポートされなくなるようになります。バージョンの解決は、qmlRegisterModuleImport() の場合と同様の仕組みで動作します。

qmlRegisterModuleImport()も参照してください 。

マクロのドキュメント

QML_DECLARE_TYPE()

Q_DECLARE_METATYPE(TYPE *) およびQ_DECLARE_METATYPE(QQmlListProperty<TYPE>)

QML_DECLARE_TYPEINFO(Type, Flags)

指定されたFlags で記述されているとおり、指定されたType の追加のプロパティを宣言します。

現在、サポートされている型情報はQML_HAS_ATTACHED_PROPERTIES のみであり、これはType が添付プロパティをサポートしていることを宣言します。Type にQML_ATTACHED マクロが含まれている場合、QML_DECLARE_TYPEINFO()は不要です。

© 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.