Qt3D NodeInstantiator 使用时报出index out of range错误的记录
程序员文章站
2022-05-31 12:45:22
最近用到NodeInstantiator批量加入实体 刚开始用的时候一直程序崩溃 错误代码大致如下: 大体上代码结构类似上面这样,简单起见NodeInstantiator的model就写成2 manage_system是c++写的一个QObject子类,存储一些加载进来的数据 manage_syst ......
最近用到nodeinstantiator批量加入实体
刚开始用的时候一直程序崩溃
错误代码大致如下:
// main.qml applicationwindow { ...... loader { id: root_loader } ...... connections { target: manage_system onsysteminited: root_loader.source = "mainwindow.qml" } ...... } // mainwindow.qml rectangle { scene3d { id: scene_3d aspect: ["logic", "input] entity: sceneentity { ...... nodeinstantiator { model: 2 delegate: entity { ...... } } ...... } } }
大体上代码结构类似上面这样,简单起见nodeinstantiator的model就写成2
manage_system是c++写的一个qobject子类,存储一些加载进来的数据
manage_system初始化完成后会发射一个systeminited信号.
用loader就是因为希望能在manage_system完整初始化之后,再去加载一些控件(有信息依赖于manage_system)
然而程序崩溃的原因就是用了loader,改成下面这个结构就好了
// mainwindow.qml rectangle { connections { target: root_loader onloaded: instantiator.model = 2 } scene3d { id: scene_3d aspect: ["logic", "input] entity: sceneentity { ...... nodeinstantiator { id: instantiator // model: 2 /* 注意这里没有指定model,延时初始化model */ delegate: entity { ...... } } ...... } } }
我猜测第一段代码的问题是instantiator初始化的时机过早(parent的状态还不是loader.ready)
所以在root_loader加载完成后再指定model