Самоанализ / отражение QtScript?

#python #qt #introspection #qtscript

#python #qt #самоанализ #qtscript

Вопрос:

Поддерживает ли QtScript самоанализ / отражение (например, как dir () в python), что позволило бы мне «составить карту» api изнутри, исследуя объектную модель во время выполнения?

Ответ №1:

Вам действительно следует больше смотреть на 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.

Со страницы QMetaObject в Qt:

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 хорошо работает с ними из моих простых тестов.

Вы должны быть в состоянии создать его с любым из них.

FTR, afaik PyQt и Qt — это одно и то же, предоставляют одну и ту же информацию. В конечном счете, если это работает в C Qt, оно должно работать и в PyQt.

Ответ №2:

ДА. Вы не указали, хотите ли вы сделать это из QtScript или из C .

В скриптовом движке вы можете использовать стандартные методы ECMAScript для перебора всех свойств объекта:

 for (var property_name in some_object) {
  // do something with each property
}
  

Это должно включать, например, любые слоты, сигналы и Q_PROPERTY s в QObject, импортированном в скриптовый движок. Он не будет включать в себя какие-либо методы C , которые не были отмечены как сигнал, слот или Q_INVOKABLE .

В C вы можете использовать QScriptValueIterator для перебора всех свойств любого объекта в скриптовом движке.