QtScript Самоанализ / Отражение? - PullRequest
1 голос
/ 05 апреля 2011

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

Ответы [ 2 ]

1 голос
/ 06 апреля 2011

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

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

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

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

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

1 голос
/ 05 апреля 2011

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

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

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

...