QQmlPropertyMap* gDataProp;
int main(int argc, char *argv[])
{
    set_qt_environment();
    QGuiApplication app(argc, argv);
    ControlObjTreeModel  uiObjectTreeMod;
    gDataProp =new QQmlPropertyMap();  
    gDataProp->insert(mapNumOfSchObj,0);
    QJsonObject paramObj ={{shcObjName,"K0"} };
    QJsonObject paramIns[3];
    QJsonObject paramOut[2];
 
    paramIns[0]={{ portName,"IN0"} , { portID,1}};
    paramIns[1]={{ portName,"IN1"} , { portID,2}};
    paramIns[2]={{ portName,"IN2"} , { portID,3}};
 
    paramOut[0]={{ portName,"Out0"} , { portID,1}};
    paramOut[1]={{ portName,"Out1"} , { portID,2}};
 
    GroupObject gIns  [3];
    GroupObject gOuts [2];
 
    qDebug() <<paramObj;
 
    knx1 =new InterfaceObject(gDataProp,¶mObj ,paramIns, paramOut, gIns,gOuts ,3,2);
    paramObj[shcObjName]="Sw";
    sw1 =new InterfaceObject(gDataProp,¶mObj ,paramIns, paramOut, gIns,gOuts ,3,2);
 
    QQmlApplicationEngine engine;
    const QUrl url
(u
"qrc:/qt/qml/Main/main.qml"_qs
);
  
        &engine,
        &QQmlApplicationEngine::objectCreated,
        &app,
            if (!obj && url == objUrl)
        },
        Qt::QueuedConnection);
 
    // BOLDFACE by OP for emphasis (Mod.)
    engine.rootContext()->setContextProperty("gDatPr", gDataProp );
    //
 
    engine.addImportPath(":/");
    engine.load(url);
 
    if (engine.rootObjects().isEmpty()) {
        return -1;
    }
 
    return app.exec();
}
 
InterfaceObject:: InterfaceObject(QQmlPropertyMap * dmap ,QJsonObject* objParams
                                 , QJsonObject* insParam , QJsonObject* outsParam,
                                 GroupObject *inGo ,GroupObject *outGo, uint16_t numIns , uint16_t numOuts)
{
    int numOfSchObj ;
    schDataMap=  dmap;
    interfaceData= new QJsonObject (*objParams);
    numOfIns=numIns;
    numOfOuts=numOuts;
    qDebug()<<*interfaceData;
 
    numOfSchObj =schDataMap->value(mapNumOfSchObj).toInt();
    interfaceData->insert(shcObjID,numOfSchObj+1);
 
    ins = new InterfacePort*[numIns];
    outs = new InterfacePort*[numOuts];
 
    for (uint16_t  i=0;i<numIns;i++)
    {
        ins [i]=new InterfacePort(insParam[i], inGo[i]);
        jsonArrayIn.push_back(ins [i]->getPortObj());
    }
 
    interfaceData->insert(shcObjIns,jsonArrayIn);
    interfaceData->insert(shcObjNumOfIns,numOfIns);
    qDebug()<<*interfaceData;
 
    for (uint16_t  i=0;i<numOuts;i++)
    {
        outsParam[i].insert(pConnectionTarObjID,-2);
        outsParam[i].insert(pConnectionTarPortID,-4);
        outs [i]=new InterfacePort(outsParam[i], outGo[i]);
        jsonArrayIn2.push_back(outs[i]->getPortObj());
    }
 
    interfaceData->insert(shcObjOuts,jsonArrayIn2);
    interfaceData->insert(shcObjNumOfOuts,numOfOuts);
 
    schDataMap->insert(*objKey ,  *interfaceData);
 
    // BOLDFACE by OP for emphasis (Mod.)
    schDataMap->insert( mapNumOfSchObj ,numOfSchObj+1);
 
 
    schDataMap->connect(
        schDataMap,
        &QQmlPropertyMap::valueChanged,
        this,
        &InterfaceObject::updateFromGuiSlot);
    // end boldface
 
}
        QQmlPropertyMap* gDataProp;
int main(int argc, char *argv[])
{
    set_qt_environment();
    QGuiApplication app(argc, argv);
    ControlObjTreeModel  uiObjectTreeMod;
    gDataProp =new QQmlPropertyMap();  
    gDataProp->insert(mapNumOfSchObj,0);
    QJsonObject paramObj ={{shcObjName,"K0"} };
    QJsonObject paramIns[3];
    QJsonObject paramOut[2];
    paramIns[0]={{ portName,"IN0"} , { portID,1}};
    paramIns[1]={{ portName,"IN1"} , { portID,2}};
    paramIns[2]={{ portName,"IN2"} , { portID,3}};
    paramOut[0]={{ portName,"Out0"} , { portID,1}};
    paramOut[1]={{ portName,"Out1"} , { portID,2}};
    GroupObject gIns  [3];
    GroupObject gOuts [2];
    qDebug() <<paramObj;
    knx1 =new InterfaceObject(gDataProp,¶mObj ,paramIns, paramOut, gIns,gOuts ,3,2);
    paramObj[shcObjName]="Sw";
    sw1 =new InterfaceObject(gDataProp,¶mObj ,paramIns, paramOut, gIns,gOuts ,3,2);
    QQmlApplicationEngine engine;
    const QUrl url(u"qrc:/qt/qml/Main/main.qml"_qs);
    QObject::connect(
        &engine,
        &QQmlApplicationEngine::objectCreated,
        &app,
        [url](QObject *obj, const QUrl &objUrl) {
            if (!obj && url == objUrl)
                QCoreApplication::exit(-1);
        },
        Qt::QueuedConnection);
    // BOLDFACE by OP for emphasis (Mod.)
    engine.rootContext()->setContextProperty("gDatPr", gDataProp );
    //
    engine.addImportPath(QCoreApplication::applicationDirPath() + "/qml");
    engine.addImportPath(":/");
    engine.load(url);
    if (engine.rootObjects().isEmpty()) {
        return -1;
    }
    return app.exec();
}
InterfaceObject:: InterfaceObject(QQmlPropertyMap * dmap ,QJsonObject* objParams
                                 , QJsonObject* insParam , QJsonObject* outsParam,
                                 GroupObject *inGo ,GroupObject *outGo, uint16_t numIns , uint16_t numOuts)
    :QObject (dmap)
{
    int numOfSchObj ;
    schDataMap=  dmap;
    interfaceData= new QJsonObject (*objParams);
    numOfIns=numIns;
    numOfOuts=numOuts;
    qDebug()<<*interfaceData;
    numOfSchObj =schDataMap->value(mapNumOfSchObj).toInt();
    interfaceData->insert(shcObjID,numOfSchObj+1);
    ins = new InterfacePort*[numIns];
    outs = new InterfacePort*[numOuts];
    for (uint16_t  i=0;i<numIns;i++)
    {
        ins [i]=new InterfacePort(insParam[i], inGo[i]);
        jsonArrayIn.push_back(ins [i]->getPortObj());
    }
    interfaceData->insert(shcObjIns,jsonArrayIn);
    interfaceData->insert(shcObjNumOfIns,numOfIns);
    qDebug()<<*interfaceData;
    for (uint16_t  i=0;i<numOuts;i++)
    {
        outsParam[i].insert(pConnectionTarObjID,-2);
        outsParam[i].insert(pConnectionTarPortID,-4);
        outs [i]=new InterfacePort(outsParam[i], outGo[i]);
        jsonArrayIn2.push_back(outs[i]->getPortObj());
    }
    interfaceData->insert(shcObjOuts,jsonArrayIn2);
    interfaceData->insert(shcObjNumOfOuts,numOfOuts);
  
    objKey=new QString (mapSchObjHeader + QString::number(numOfSchObj));
    schDataMap->insert(*objKey ,  *interfaceData);
    // BOLDFACE by OP for emphasis (Mod.)
    schDataMap->insert( mapNumOfSchObj ,numOfSchObj+1);
  
    schDataMap->connect(
        schDataMap,
        &QQmlPropertyMap::valueChanged,
        this,
        &InterfaceObject::updateFromGuiSlot);
    // end boldface
}
To copy to clipboard, switch view to plain text mode 
  and in qml Side:
Bookmarks