2015-01-27 17 views
5

Ho un metodo in C++ che prevede un oggetto:Come inviare oggetto javascript a C++ da qml?

Q_INVOKABLE void sendValue (const MyClass &value); 

mi vuoi richiamarlo da QML, all'interno di una funzione JavaScript, in questo modo:

MyApi.sendValue({ 
    "one":"one", 
    "two":2.0, 
    "three": false, 
    "four": [ 5, 6 ], 
    } 
}); 

MyClass è definito come segue:

#ifndef MYCLASS_H 
#define MYCLASS_H 
#include <QString> 
#include <QVariant> 
class MyClass { 
    QString one; 
    double two; 
    bool three; 
    int four[10]; 
public: 
    MyClass(); 
    ~MyClass(); 
    // getters, setters, etc. 
}; 
Q_DECLARE_METATYPE(MyClass) 
#endif // MYCLASS_H 

In main.cpp, MyClass è iscritto su qRegisterMetaType<MyClass>(); Ma nessuno dei setter viene chiamato, solo Costruttore di default di MyClass.

risposta

6

È possibile inviare oggetti javascript a C++ da qml tramite QVariantMap e javascript array con QVariantList. Va anche dall'altra parte, puoi inviare oggetti javascript a qml usando QVariantMap da C++. Basta fare la tua funzione in C++ Q_INVOKABLE o uno slot e il parametro è QVariantMap e convertire quello QVariantMap in MyClass {}.

Vedere http://doc.qt.io/qt-5/qtqml-cppintegration-data.html per dettagli (cercare QVariantList e QVariantMap su JavaScript Array e Object).

+0

Quindi, o mi analizzare un 'QVariantMap' nel metodo C++, o ho definire il mio metodo come questo: ' Q_INVOKABLE vuoto sendValue (const QString & uno, const doppio due, const bool tre, const QList quattro); ' – kazmer

+0

Yep quelle sono le opzioni – vpicaver