Q ++

2015-07-24 16 views
10

'da C++ Invoked yöntemine bir Javascript geri çağrısını geçirme C++ uygulamasında çağrılabilir bir işleve sahip bir sınıfa sahip olmak istiyorum, yapmak istediğim şey bu yöntemi QML/Javascript'ten (bu iş için çalıştım) çağırmak ve geçmek Bu bir Javascript geri arama. kodundaQ ++

, şöyle benim sınıfını tanımlar:

class MyObject: public QObject 
{ 

Q_OBJECT 

public: 
    Q_INVOKABLE void doSomething(quint64 x, /* what goes here? */ jsCallback) 
    { 
     x += 1; 

     // I suspect this will require a invocation mechanism but 
     // this shows what I'd like to do 
     jsCallback(x); 
    } 
}; 

Ve QML içinde, ben böyle bir şey yapmak istiyorum:

Rectangle { 

    function myCallback(x){ 
     console.log("x=" + x); 
    } 

    MouseArea{ 
     anchors.fill: parent 
     onClicked:{ 
      myObject.doSomething(2, myCallback); 
     } 
    } 
} 

yüzden Rectangle tıkladığınızda, ben konsolda x=3 görecekti. C++ 'daki parametreyi nasıl tanımlarım ve bunu gerçekleştirmek için geri çağırmayı nasıl çağırırım?

Teşekkür ederiz!

cevap

13

Sanırım bunu anladım. Ne yaptığını sona erdi böyle gibi benim C bu uygulamaya ++ sınıf:

class MyObject: public QObject 
{ 

Q_OBJECT 

public: 
    Q_INVOKABLE void doSomething(quint64 x, QJSValue jsCallback) 
    { 
     x += 1; 

     QJSValue val = jsCallback.engine()->newObject(); 
     val.setProperty("x", x); 

     jsCallback.call(QJSValueList { val }); 
    } 
}; 

Sonra gibi benim geri arama değeri erişebilirsiniz: Eğer işlevi içinde lambda fonksiyonunda kullanırsanız (Ayrıca

function myCallback(x){ 
    console.log("x=" + x.x); 
} 
+0

Örneğin, ağ yanıtından sonra) QJSValue değerini değiştirilebilen \ değer olarak geçirin. – Alexander

İlgili konular