【发布时间】:2014-11-08 03:27:05
【问题描述】:
我正在将对象序列化到 QML,并且希望能够获得 QML 对象中定义的函数的源代码。假设我在 QML (test.qml) 中有以下示例:
import QtQml 2.2
QtObject {
function foo() {
return 42;
}
}
我从中创建了一个QObject: obj。
有没有什么方法(可以是hacky)在不解析QML文件obj创建的情况下获取obj的方法foo的源代码?
可以使用QQmlComponent obj 是从或任何其他Qt 类创建的,只要我不必自己解析即可。或者,如何在不编写我自己的解析器的情况下从test.qml 文件中获取函数的源代码?我不想假设 test.qml 有什么特别之处(例如,它可以与上面的不同,它不必简单到可以使用正则表达式或其他不成熟的 QML 解析器)。
假设它像 JavaScript 一样工作,我尝试了类似的东西:
QQmlExpression expr(engine.rootContext(), obj, "foo.toString()");
QVariant sourceCode = expr.evaluate();
但是,它不起作用。
编辑:根据http://www.ecma-international.org/ecma-262/5.1/#sec-15.3.4.2,函数对象原型的toString 方法是实现定义的。如果是 QML,我会得到结果:
QVariant(QString, "function() { [code] }")
由于似乎没有办法通过 JS 或 C++ 获取代码,因此我不再将自己局限于公共 Qt API。
【问题讨论】:
-
您想要源代码?还是只想运行函数?
-
我需要源代码,而不是运行函数。
标签: javascript c++ qt qml qt5