最近用到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