- 
    
 Technical task
        
     - 
    Resolution: Done
 - 
    
P2: Important
 - 
    None
 
Q3DSUipPresentation presentation;
...
auto obs = [](Q3DSScene *scene, Q3DSGraphObject::DirtyFlag change, Q3DSGraphObject *obj) {
        if (change == Q3DSGraphObject::DirtyNodeAdded)
            qDebug("  added: %s", obj->id().constData());
        else if (change == Q3DSGraphObject::DirtyNodeRemoved)
            qDebug("  removed: %s", obj->id().constData());
    };
Q3DSScene *scene = presentation.object<Q3DSScene>("scene");
Q3DSModelNode *model1 = presentation.object<Q3DSModelNode>("model1");
scene->addSceneChangeObserver(obs);
Q3DSModelNode *model2 = presentation.newObject<Q3DSModelNode>("model2");
model2->setMesh(presentation.mesh(QLatin1String("#Cylinder")));
Q3DSDefaultMaterial *mat2 = presentation.newObject<Q3DSDefaultMaterial>("mat2");
// this will not cause a notification since model2 does not have a parent
// and so is not associated with the scene yet
model2->appendChildNode(mat2);
// this should trigger a DirtyNodeAdded
model1->appendChildNode(model2);
or for slides:
Q3DSSlide *masterSlide = presentation.masterSlide();
auto obs = [](Q3DSSlide *master, Q3DSGraphObject::DirtyFlag change, Q3DSSlide *slide) {
    if (change == Q3DSGraphObject::DirtyNodeAdded)
        qDebug("  added: %s", obj->id().constData());
    else if (change == Q3DSGraphObject::DirtyNodeRemoved)
        qDebug("  removed: %s", obj->id().constData());
};
masterSlide->addSlideGraphChangeObserver(obs);
| For Gerrit Dashboard: QT3DS-1174 | ||||||
|---|---|---|---|---|---|---|
| # | Subject | Branch | Project | Status | CR | V | 
| 220865,4 | Add scene graph change notifications | master | qt3dstudio/qt3d-runtime | Status: MERGED | +2 | 0 |