2015-04-05 132 views
6

我宣佈在C++通Java腳本函數作爲參數傳遞給C++函數

class Action : public QObject 
{ 
    Q_OBJECT 
    Q_PROPERTY(QString name READ name) 
public: 
    Action(): QObject(0) {} 
    QString name() const { return "rem"; } 
    Q_INVOKABLE void getData() {}; 
} 

我的對象,並使其可用於QML:

engine()->rootContext()->setContextProperty("action", new Action()); 

如何傳遞給getData()方法javascript函數作爲參數並在C++端調用此函數?

所以從QML來看它應該指向的樣子:

action.getData(function(data) { alert(data); }); 

回答

11

它使用QJSValue是可能的。例如:

//C++ 
Q_INVOKABLE void getData(QJSValue value) { 
    if (value.isCallable()) { 
     QJSValueList args; 
     args << QJSValue("Hello, world!"); 
     value.call(args); 
    } 
} 

//QML 
action.getData(function (data){console.log(data)}); 
相關問題