我正在寫一個對象到QML的序列化,並希望能夠獲得在QML對象中定義的函數的源代碼。假設我有在QML(test.qml
)下面的例子:如何在C++中獲取QML方法的源代碼?
我創建一個QObject
:從obj
。
有什麼辦法(可哈克),以獲得obj
的方法foo
的源代碼,而無需解析QML文件obj
從被創造?
可以使用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了。
你想要一個源代碼?或者只是想運行功能? – nitish005 2014-11-08 05:12:45
我需要的源代碼,而不是運行該功能。 – Xilexio 2014-11-08 15:44:27