【发布时间】:2017-03-07 14:49:00
【问题描述】:
我有应该在运行时创建和删除的实体。实体只有材料和网格组件。材质是 QDiffuseMapMaterial 和 QTextureImage。
当实体开始在场景中添加和删除时,有时应用程序会因此断言而崩溃:
qt_assert: ASSERT: "img != nullptr" 在文件中 ../../include/Qt3DRender/5.8.0/Qt3DRender/private/../../../../../src/render/texture/apitexturemanager_p.h, 第 286 行
但不幸的是,我不知道为什么会这样。我以这种方式添加实体:
QEntity * visibleObject = new QEntity();
QDiffuseMapMaterial * material = new QDiffuseMapMaterial();
QTextureImage * diffuseTextureImage = new QTextureImage();
diffuseTextureImage->setSource(QUrl("qrc:/resources/tile.png"));
material->diffuse()->addTextureImage(diffuseTextureImage);
visibleObject->addComponent(material);
// set mesh
QPlaneMesh * mesh = new QPlaneMesh();
mesh->setWidth(1.0 / 2);
mesh->setHeight(1.0 / 2);
visibleObject->addComponent(mesh);
visibleObject->setParent(_rootEntity);
然后像这样删除:
delete visibleObject;
_rootEntity 是 cpp 代码中定义的场景根实体。使用 Scene3D 在 QML 文件中定义的场景:
Scene3D {
id: scene
anchors.fill: parent
aspects: ["render", "logic", "input"]
entity: rootEntity
}
而_rootEntity 是这样通过的:
context->setContextProperty("rootEntity", _rootEntity);
如果有必要我可以准备简单的例子来重现问题。
谢谢。
【问题讨论】: