1

QtScript 是否支持自省/反射(例如,像 python 的 dir()),这将使我能够通过在运行时探索对象模型从内部“映射”一个 api?

4

2 回答 2

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.

从 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 中工作。

于 2011-04-05T09:42:05.787 回答
1

是的。您没有指定是在 QtScript 中还是在 C++ 中执行此操作。

在脚本引擎中,您可以使用标准的 ECMAscript 技术来迭代对象的所有属性:

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

Q_PROPERTY这应该包括例如导入脚本引擎的 QObject 上的任何槽、信号和s。它不包括任何未标记为信号、槽或Q_INVOKABLE.

在 C++ 中,您可以使用QScriptValueIterator迭代脚本引擎中任何对象的所有属性。

于 2011-04-05T22:40:34.550 回答