qqml.h プロキシページ
タイプ
enum | QQmlModuleImportSpecialVersions { QQmlModuleImportModuleAny, QQmlModuleImportLatest, QQmlModuleImportAuto } |
関数
QObject * | qmlAttachedPropertiesObject(const QObject *attachee, bool create = 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) |
マクロ
QML_DECLARE_TYPE | |
QML_DECLARE_TYPEINFO(Type, Flags) |
型ドキュメント
enum QQmlModuleImportSpecialVersions
qmlRegisterModuleImport() およびqmlUnregisterModuleImport() のバージョン引数に渡すことができる特別な値を定義する。
定数 | 値 | 説明 |
---|---|---|
qqml.h::QQmlModuleImportModuleAny | -1 | ベースモジュールの majorVersion として渡された場合、インポートがどのバージョンのモジュールにも適用されることを示します。 |
qqml.h::QQmlModuleImportLatest | -1 | インポートされるモジュールのメジャー・バージョンまたはマイナー・バージョンとして 渡された場合、指定されたメジャー・バージョンの最新の全体バージョンまたは 最新のマイナー・バージョンがインポートされることを示す。 |
qqml.h::QQmlModuleImportAuto | -2 | インポートされるモジュールのメジャーバージョンとして渡されたときは、 ベースモジュールのバージョンが転送されることを示す。 |
関数のドキュメント
template <typename T> QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool create = true)
このテンプレート関数の形式は以下の通りである:
template<typename T> QObject *qmlAttachedPropertiesObject(const QObject *attachee, bool create = true)
これは、指定されたattachee にアタッチ型T によってアタッチされた、アタッチされたオブジェクト・インスタンスを返す。
create が真で、T型が有効なアタッチ型である場合、これは新しいアタッチされたオブジェクト・インスタンスを生成して返します。
T型が有効なアタッチ型でない場合、またはcreate が偽で、attachee に対して以前にアタッチオブジェクトインスタンスが作成されていない場合、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を返します。そうでなければ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)
このテンプレート関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされたライブラリのqmlName という名前の C++ 型とその拡張オブジェクトを QML システムに登録します。メインの型にないプロパティは拡張オブジェクトから探します。
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)
このテンプレート関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされたライブラリに、qmlName という名前の C++ 型とその拡張子を QML システムに登録します。
この型は名前と型を持っていますが、作成することはできません。ユーザがこの型のインスタンスを作成しようとすると、reason というエラーメッセージが表示されます。
これは、その型が付属プロパティや列挙値、抽象基底クラスとその拡張子のみを提供することを目的としている場合に便利です。
QMLの型IDを返します。
QML_EXTENDED(),QML_UNCREATABLE(),qmlRegisterUncreatableType()も参照 。
void qmlRegisterModule(const char *uri, int versionMajor, int versionMinor)
この関数は、versionMajor とversionMinor で指定されたバージョンで、特定のuri のモジュールを登録する。
この関数は、そのバージョンに対応する型が登録されていなくても、特定のモジュールのバージョンを利用できるようにするために使用できます。これは特に、関連するモジュールのバージョンを同期させておくのに便利です。
void qmlRegisterModuleImport(const char *uri, int moduleMajor, const char *import, int importMajor = QQmlModuleImportLatest, int importMinor = QQmlModuleImportLatest)
メジャーバージョンmoduleMajor のモジュールuri に対して qmldir-import を登録します。
これはqmldirファイルのimport
ステートメントと同じ効果があります:importMinor バージョンmoduleMajor のuri がインポートされるたびに、バージョンimportMajor のimport も自動的にインポートされます。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)
このテンプレート関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされたライブラリに、指定されたリビジョンの C++ 型を QML システムに登録します。
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)
この関数はシングルトンオブジェクトcppObject 、特定のuri とtypeName を登録するために使われます。そのバージョンはversionMajor とversionMinor の組み合わせです。
シングルトン型をURIに登録することで、QMLのコードに任意の機能(メソッドやプロパティ)を提供することができます。
与えられた型Tのオブジェクトをシングルトン型として登録するにはこの関数を使います。
QObject シングルトン型は登録された型名で参照することができます。この型名はConnections 型のターゲットとして、あるいは他の型IDと同様に使用することができます。ただし、1つだけ例外があります。QObject シングルトン型のプロパティは、シングルトン型名が他の項目と同じコンポーネント内のオブジェクトを識別しないため、エイリアスできません。
注: cppObject は使用される QML エンジンより長生きしなければなりません。さらに、 cppObject はエンジンと同じスレッド親和性を持たなければなりません。複数のエンジンに別々のシングルトンインスタンスを使いたい場合は、qmlRegisterSingletonType を使う必要があります。スレッドセーフの詳細については、スレッドと QObjectsを参照してください。
注意: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ファイルのimportの中にpragma Singleton文を追加します。さらに、その型はsingletonキーワードを持つqmldirファイルで定義され、そのqmldirはsingletonを使用するQMLファイルによってインポートされなければなりません。
QML_SINGLETONも参照してください 。
int qmlRegisterSingletonType(const char *uri, int versionMajor, int versionMinor, const char *typeName, std::function<QJSValue (QQmlEngine *, QJSEngine *)> callback)
この関数は、シングルトンタイププロバイダcallback を、特定のuri とtypeName に、versionMajor とversionMinor で指定されたバージョンで登録するために使用することができる。
シングルトンタイプをインストールすることで、開発者はクライアントに任意の機能(メソッドやプロパティ)を提供することができます。
シングルトンタイプは、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)
この関数は、シングルトンタイププロバイダcallback を特定のuri とtypeName に、versionMajor とversionMinor で指定されたバージョンで登録するために使用することができる。
シングルトンタイプをuriにインストールすることで、開発者はクライアントが個々のインスタンスをインスタンス化することなく、任意の機能(メソッドやプロパティ)をクライアントに提供することができます。
QObject QJSValueこの関数は、与えられた型TのQObject をシングルトン型として返すシングルトンタイプ提供関数を登録するために使用されるべきである。
QObject シングルトン型は、登録された型名で参照することができ、この型名はConnections 型のターゲットとして使用することができる。この例外として、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)
このテンプレート関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされたライブラリに、qmlName という名前で 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を新しい型として登録する標準的な形式です。後者は、特定のリビジョンのクラスを指定されたバージョンに登録するものです(「型のリビジョンとバージョン」参照)。
例えば、"com.mycompany.qmlcomponents "という名前空間のバージョン1.0のC++クラスMySliderItem
を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)
この関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされたライブラリに、qmlName という名前でQMLシステムに型を登録します。この型は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)
この関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされた型名前空間のqmlName という名前の型を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 is not a type "というメッセージが表示されます。
QML_UNAVAILABLE 、qmlRegisterUncreatableType()、C++とQMLの正しい統合方法の選択も参照してください 。
int qmlRegisterUncreatableMetaObject(const QMetaObject &staticMetaObject, const char *uri, int versionMajor, int versionMinor, const char *qmlName, const QString &reason)
この関数は、uri からインポートされ、versionMajor とversionMinor から構成されるバージョン番号を持つライブラリのqmlName という名前で、staticMetaObject とその拡張機能を QML システムに登録します。
メタオブジェクトのインスタンスは生成できません。ユーザが作成しようとすると、与えられた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側では、登録したenumが使えるようになります:
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)
このテンプレート関数は、versionMajor とversionMinor から構成されるバージョン番号を持つuri からインポートされたライブラリに、qmlName という名前で C++ 型を QML システムに登録します。
この型は名前と型を持っていますが、作成することはできず、作成しようとすると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() で以前に登録されたモジュールのインポートを削除する。
この関数を呼び出すと、バージョンmoduleMajor のuri がインポートされたときに、バージョンimportMajor.importMinor のimport が自動的にインポートされなくなります。バージョン解決は、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 が付加プロパティをサポートしていることを宣言している。QML_DECLARE_TYPEINFO() はType がQML_ATTACHED マクロを含む場合は不要です。
© 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.