Is there possible pass Javascript Object from qml as QVariant to c++ layer as a parameter of slot?

265 views Asked by At

I try to pass Object from qml to c++ as a parameter of slot, is it possible to get in c++? In slot in c++ I have empty variable QVariant(QJSValue, ). I need to pass Object as a map to c++ (QMap<QString,QString>). Is it possible to pass an object this way?

Some.h

class Some : public QObject
{
    Q_OBJECT
public slot:
    Q_INVOKABLE void someSlot(QVariant variableToPass);
}

Some.cpp

void Some :: someSlot(QVariant variableToPass){
    qDebug()<<"Object from qml"<< variableToPass; // QVariant(QJSValue, ) empty variable!!!!!!!!!!!!!!
    qDebug()<<"variableToPass.canConvert<QJSValue>()"<<variableToPass.canConvert<QJSValue>();//true, but empty!!!
    QJSValue jsValue = variableToPass.value<QJSValue>();
    QMap<QString,QString> data = jsValue.toVariant().value<QMap<QString,QString>>();
}

some2.qml

Item {
    Button {
    onClicked: registeredInQmlVar.someSlot({"Login":"Cash","Password":"123"})//call slot and pass Object with two parameters
    }
}
1

There are 1 answers

0
Artem Redko On

My mistake was quotes in keys of passed object and convert with QMap<QString,QVariant> data = variableToPass.toMap();