#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 для перебора всех свойств любого объекта в скриптовом движке.