問題タブ [metaobject]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
grails - Grails ドメイン オブジェクトのプロパティの型 (クラス) を取得するにはどうすればよいですか?
Grails でドメイン オブジェクトを動的に作成しようとしていますが、別のドメイン オブジェクトを参照するプロパティについて、メタプロパティがその型が "java.lang.Object" であり、期待される型ではないことを示すという問題が発生しました。
例えば:
は、別のドメイン クラス「サイト」を参照するドメイン クラスの始まりです。
このコードを (サービスで) 使用して、このクラスのプロパティ タイプを動的に検索しようとすると、次のようになります。
その結果、Java クラスは認識されますが、Grails ドメイン クラスは認識されません。出力には次の行が含まれます。
問題は、動的ルックアップを使用して一致するオブジェクトを見つけたいことです。たとえば、
ここで、propertyClass はイントロスペクションによって取得されます。idName は検索するプロパティの名前 (必ずしもデータベース ID ではありません) であり、idValue は検索する値です。
それはすべてで終わります:
プロパティの実際のドメイン クラスを見つける方法はありますか? または、タイプが指定されていないドメイン クラスのインスタンス (タイプを持つプロパティ名のみ) を見つけるという問題に対する他の解決策でしょうか?
タイプ名が大文字のプロパティ名であるという規則を使用すると機能します(「サイト」->「サイト」) grailsApplication インスタンスを介してクラスを検索しますが、それは避けたいと思います。
qt - QMetaObject Compiler について説明しますか?
Qtでシグナルスロットメカニズムを提供できるようにするメタオブジェクトコンパイルをQtがどのように実装しているかを知りたいと思っています。ドキュメントで詳細を見つけることができません。
編集::のソースコードを取得できません_id = QObject::qt_metacall(_c, _id, _a);
以下はソースファイルと対応する moc ファイルです。
また、 QObject::connect(ssobj1,SIGNAL(readyToPrint()),ssobj1,SLOT(print())) がどのように展開するかを説明してください
ruby - Rubyにはメタオブジェクトプロトコルがありますか?ない場合、それを実装することは可能ですか?
私の無知を許してください、しかしメタオブジェクトプロトコルとは何ですか、そしてRubyはそれを持っていますか?そうでない場合、Ruby用に実装することは可能ですか?Rubyが持つとしたら、メタオブジェクトプロトコルはどのような機能を備えているでしょうか?
unit-testing - Qtでプライベートメソッドを単体テスト(アクセス)することは可能ですか?
アプリの単体テストを作成していますが、プライベート メソッドをテストするクラスを見つけました。これは、特定のクラスの設計が不十分な結果である可能性がありますが、それを行う必要があります。おそらくQMetaObjectなどを使用して、Qtでプライベートメソッドを呼び出す方法はありますか?
単体テストには QTestLib フレームワークを使用しています。
multithreading - QueuedConnection を使用して配列または引数でメソッドを呼び出す
別のスレッドで QObject の任意のスロットを呼び出したい。
私は持っている:
私が欲しい:
引数の数に基づいてinvokeMethodコードを複製するようなことはしたくありません。
引数の配列を受け入れるinvokeMethodを取得する場所、またはqt_metacallをキューに入れる方法は?
c++ - QWidget を継承する qt プラグインの作成方法
QWidgets について調べていたところ、実行時に読み込まれるウィジェットであるプラグインを作成したいと考えています。サンプルコードと要件を見ていたら、プラグインはインターフェイスと QObject を継承しているようです。すべて異なるボタンと異なるスロットを持つ QWidget プラグインを作成するにはどうすればよいですか? また、インターフェイスから継承するプラグインと、QWidget から継承する (QObject から継承する) ベースクラスを作成することは可能でしょうか。
http://developer.qt.nokia.com/doc/qt-4.8/plugins-howto.html
ただし、名前を知るだけで実行時にウィジェットをロードできるメタオブジェクトについて読みました (RTTI サポートは必要ありません)。しかし、正確には、クラスを認識するためにクラスをプロジェクトに配信するにはどうすればよいでしょうか? プラグインを扱うときは、.pro ファイルのさまざまなフラグ セットを使用してコンパイルする特別なプロジェクトにプラグインを含める必要があります。しかし、ここでどうすればよいでしょうか?
本当に qtplugin を使いたいのですが、どうすればいいですか?
アイデア:
プラグインが返す QWidget をプラグインに作成させることは、受け入れられ、最適でしょうか? プラグインなしでインターフェイスを作成する場合、デザイナーにプラグインを作成する意味がわかりません。それとも私はそれを誤解しましたか?
http://techbase.kde.org/Development/Tutorials/Writing_Qt_Designer_Plugins
このすべてのコードを 1 つのプロジェクトに入れ、プラグインとしてコンパイルし、メイン アプリケーションで探してロードします。そのインスタンスを作成し、表示するウィジェットを作成させます。
これを行うより良い方法はありますか、それともこれですか?
qt - オブジェクト タイプを保存し、その情報のみを使用してオブジェクトを作成する方法
次のようなリストに MetaObjects を格納したいと思います。
アプリケーション全体でこれらのオブジェクトを追跡したいのですが、まだ割り当てたくありません。クラスに情報を追加することで、MetaObject 関数 "classInfo(int).value()" を使用できるようになります。QListWidget に保存するときにこれを使用します。QListWidget の行が押されたときに、リストに格納されている特定の種類のオブジェクトを作成できるようにしたいと考えています。(すべてのクラスが同じ基本クラスから派生していることも追加する必要があります)
このサンプル コードは、私がやりたいことの一部を説明していますが、彼の例では、作業を進めながらクラスを追加します。 http://lists.qt.nokia.com/pipermail/qt-interest/2012-January/037204.html
マニュアルを読んで、次のようなことを試してみると:
プロジェクトはコンパイルされますが、「テスト」オブジェクトを印刷しようとするとnullになります。私は何を間違っていますか?そして、これはこれを行うための最良の方法ですか?
MetaType も見ていましたが、オブジェクトの作成が許可されていない場合、たとえばメニューの文字列などをどこに保存できますか? 文字列を返す静的関数がある場合、これはより良い解決策でしょうか?
編集:コンストラクターが Q_INVOKABLE になるように変更し、「test == null」の問題を解決しました。
しかし、このソリューションの欠点は何ですか? オブジェクト ファクトリを使用する必要がありますか (スイッチ ケースを使用した昔ながらの方法)。
qt - 生成されたmoc名が正しくありません
私はcmakeを使用するQtベースのプロジェクトに取り組んでいます。生成されたすべてのmocファイルには名前が付けられていますが、生成されたmocファイルに。ではなく*.moc
名前が付けられているファイルがいくつかあります。これが発生する理由と、これらのファイルを修正する方法。moc_*.cpp
*.moc
編集:
これらのクラスはQObjectを継承しており、Q_OBJECTマクロとQ_DECLARE_PUBLICマクロがあり、.mocがない限り、コンパイルされません。
.cppファイルに.mocファイルを含める必要があります。
-.mocを生成する同一のクラス(私のクラスと同一の実装)がありますが、私のクラスはmoc_*。cppを生成することに夢中になります。
qt - qt プロパティのオーバーロード
カスタムタイプのプロパティがあります。
QJson は、次の動的割り当てを効果的に呼び出します。
Qt に記載されているように、false を返します。
値がプロパティの型と互換性がない場合、プロパティは変更されず、false が返されます。
これをカスタム値に組み込むにはどうすればよいですか? プロパティシステムはこのアクセサーを認識しないため、副次機能を明確に定義するvoid set_x(QString)
か、機能しvoid set_x(QVariant)
ない可能性があります。
また、型の互換性はどこでチェックされますか? - プログラム制御が届かない
int foo::qt_metacall(QMetaObject::Call _c, int _id, void **_a)
メタオブジェクト コンパイラによって生成される関数。
Custom
これらのタイプと互換性 を持たせるにはどうすればよいですか?
qt - 特定のクラスのすべてのインスタンスでの Qt トリガー信号
通常、Qt シグナルは QObject の特定のインスタンスでトリガーされます。
おそらくMetaObjectsを介して、特定のクラスのすべてのインスタンスでそれをトリガーする方法はありますか?
または、すべてのインスタンスの独自の静的リストを維持する唯一の方法は、おそらくコンストラクタとデストラクタを使用してから、Q_FOREACH だけにすることですか?