2016-11-06 40 views
0

我創建了一個QScriptEngine,並公開了一個可以從js腳本調用的對象函數。Qt:如何從qscriptengine傳遞數組或字典?

engine->globalObject().setProperty("obj", myObj); 

MyObj中是具有功能就像一個QObject ...

void MyObject::doSomething(int w, int h) { 
    ... 
} 

,並在我的JS代碼,我可以把它像...

obj.doSomething(5, 9); 

這可以作爲我期望它會,但是我找不到任何有關將數組或字典傳遞給這些函數的文檔。例如,如果我想傳遞一個數組,我如何定義的C++函數,所以我可以做這樣的事情......

obj.doSomething([1,2,3], "foo"); 

但願是這樣的......

void MyObject::doSomething(QVector<QVariant> firstArg, QString secondArg); 

當它不起作用時,很難將其解決,這個呼叫似乎默默無聞。

+0

你試過QVariantList嗎? – jpnurmi

回答

1

對於數組你有兩個選擇

  1. 註冊的腳本引擎的C++程序容器,見qScriptRegisterSequenceMetaType()。該函數的文檔有一個int向量的例子。

  2. 使用QScriptValue作爲函數的參數。如果它是一個數組(QScriptValue::isArray())傳遞的對象然後可檢查並使用QScriptValue::property()

選項(2)也適用於字典(在JavaScript對象)按索引進行訪問。

+0

選項2似乎是一個簡單的方法。我使用QScriptValue.property(「length」)來獲取長度和QScriptValue(「INDEX_HERE」)以獲取特定索引。謝謝。 – voodoogiant