QtScript はイントロスペクション/リフレクション (たとえば、python の dir() など) をサポートしており、実行時にオブジェクト モデルを探索して内部から API を「マッピング」できますか?
2 に答える
QObject と QMetaObject をもっとよく見る必要があります。
QScriptValue supports the types defined in the ECMA-262 standard: The primitive types, which are Undefined, Null, Boolean, Number, and String; and the Object type. Additionally, Qt Script has built-in support for QVariant, QObject and QMetaObject.
Qt の QMetaObject ページから:
Qt's meta-object system provides the signals and slots mechanism for inter-object communication, run-time type information, and the dynamic property system.
QObject にはchildren
、オブジェクトとメソッドの子のリストを返すメソッドが含まれていますparent
。
これに加えて、pyqt の観点から、これらは python オブジェクトであり、inspect モジュールは私の簡単なテストからそれらに対してうまく機能します。
これらのいずれかで 1 つを構築できるはずです。
FTR、私の知る限り PyQt と Qt は同じものであり、同じ情報を提供します。最終的に、C++ Qt で動作する場合は、PyQt でも動作するはずです。
はい。これを QtScript 内から行うか、C++ 内から行うかを指定しませんでした。
スクリプト エンジン内では、標準の ECMAscript 手法を使用して、オブジェクトのすべてのプロパティを反復処理できます。
for (var property_name in some_object) {
// do something with each property
}
Q_PROPERTY
これには、スクリプト エンジンにインポートされた QObject のスロット、シグナル、s などを含める必要があります。シグナル、スロット、または としてマークされていない C++ メソッドは含まれませんQ_INVOKABLE
。
C++ 内では、QScriptValueIteratorを使用して、スクリプト エンジン内の任意のオブジェクトのすべてのプロパティを反復処理できます。