最近用到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
onl oaded: 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
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/93382.html
標籤:C++
上一篇:c++ 記憶體二進制表示
下一篇:c++11多執行緒記錄0
