4

誰かが私のために次のことを明確にすることができるかどうか疑問に思っていました. Qt に関連するテストを受けようとしていますが、サンプルの質問はかなりあいまいです。質問の1つは次のとおりです。

Qt は、次の方法で c++ にイントロスペクションを実装します。

を。すべてのクラスを QObject として自動的に定義します。

b. QObject クラス内で自分自身を呼び出すことができるメタ オブジェクトを定義します。

c. すべての QObject に関連付けられたメタ オブジェクトを定義します。

イントロスペクションを行うには、QObject を継承する必要があることを知っています (これはシグナルとスロットも実装します)。Q_OBJECT マクロを使用すると、MOC で置き換えることができます。これらの答えは誰にでもあると思いますが、誰かに明確にしてもらいたいです。Aだと思いますが、間違っているかもしれません。

どんな助けでも大歓迎です。

4

3 に答える 3

0

効率のために (私が推測するに)、Qt はJava や .NET のように共通のベースから各型を派生させません。

QObject は QMetaObject を公開します。これにより、実際に多くのリフレクティブ プログラミングが可能になりますが、最も基本的なメタ プログラミング ツールは代わりにQMetaTypeです。

実際、QPen や QSize などの頻繁に使用されるいくつかのクラスは、「ルート」オブジェクトであり、つまり、まったく派生していないか、独自のクラスであり、マクロ Q_DECLARE_METATYPE を介してメタプログラミングで使用できるようにすることができます。

目的は、QVariantの 構築とジェネリック オブジェクトのコピーを利用できるようにすることです。次に、プロパティ交換またはメソッド呼び出しが (システム レベルで) 定義されているため、QVariant を使用して、そのようなオブジェクトを有効に活用できます。

これは「混合」された効率的なアーキテクチャであり、リテラルへのインターフェイスをハードコーディングする必要がある場合があります。ジェネリック インターフェイスは利用可能ですが、バイナリデータでのみ使用できます。繰り返しますが、効率のために。

于 2013-11-12T14:20:57.660 に答える