[Qt] Qt独自のリフレクション機構の学習

章のナビゲーション

1 分析

リフレクションのいくつかの用途:

  1. 文字列取得クラス
  2. 文字列はクラス関数(メソッド)を使用します
  3. 文字列はクラス変数(プロパティ)を使用します

2 情報

QObject::metaObject() メソッドを通じて、QObject から継承されたすべてのクラスは、メタオブジェクト システムによって生成されたメタオブジェクト オブジェクトを返し、QMetaObject::newInstance() で新しいインスタンスを作成できます。

リフレクション クラス ClassA は、Q_INVOKABLE フラグと Q_PROPERTY フラグを使用して QObject を継承します

  1. QMetaClassInfo
  2. QMetaEnum
  3. Qメタメソッド
  4. Qメタプロパティ

など、呼び出しを実装します。
詳しくは
参考記事1:Qtのリフレクション機構を利用して記述クラスの関連情報を取得する
参考記事2:Qtのリフレクション機構を利用して属性情報を取得する を参照してください。

2.1 Q_INVOKABLE を使用してクラスのパラメータ化/非パラメータ化関数呼び出しを実現する

Qt はリフレクション メカニズムを使用してオブジェクトのメンバー関数呼び出しを実現します

QtInvoke* inv = new QtInvokeA;
qDebug() << QMetaObject::invokeMethod(inv, "test");int retVal = 0;
qDebug() << QMetaObject::invokeMethod(inv
	, "testAdd"
	,Q_RETURN_ARG(int, retVal)
	,Q_ARG(int, 65)
	,Q_ARG(int, 42));

qDebug() << retVal;

2.2 関数とプロパティ

Qt のリフレクションの使用方法
Object から継承したリフレクション クラスを登録する場合、返されたシリアル番号を QMap (int 型、QString クラス名) に保存できます。QMap は、文字列を介してクラス オブジェクトを作成するために使用されます。

補充:

おすすめ

転載: blog.csdn.net/starfire_hit/article/details/126856696