La comunicación entre C ++ y QML se logra registrando clases en QML. Al mismo tiempo, es muy conveniente usar json cuando ambas partes pasan estructuras o múltiples parámetros. A continuación se explica cómo entregarlo desde dos aspectos:
1. Pasar de C++ a QML
Primero defina una función de ranura pública en la clase C ++ registrada en QML, como QJsonObject getJsonValue (); el tipo específico de json devuelto depende de la situación específica.
QJsonObject InterfaceForQml::getJsonValue()
{ objeto QJsonObject; object.insert("nombre","xiaoming"); object.insert("edad",48); objeto de retorno; }
En QML podemos llamar para obtener el objeto json pasado.
var tobjec = toQmlInfo.getJsonValue();
console.log("objeto:",tobjec.name);
console.log("edad del objeto:",tobjec.age);
2. Pasar de QML a C++
En QML
var mytestJson = {};
mytestJson.cmdId = 0;
var listFileName = [];
listFileName[0]="prueba1";
listFileName[1]="prueba2";
listFileName[2]="prueba3";
mytestJson.fileName = listFileName;
toQmlInfo.sendCmd(mytestJson);
en C++
void InterfaceForQml::sendCmd(QJsonObject cmd)
{
qDebug()<<"cmd"<<cmd;
}
Clase C++ registrada en QML
InterfaceForQml *toQmlInfo = InterfaceForQml::getInstance();
motor.rootContext()->setContextProperty("toQmlInfo",toQmlInfo);