我有在运行时应创建和删除的实体。实体只有材质和网格组件。材质是具有QTextureImage的QDiffuseMapMaterial。在添加和删除Qt3D中的实体时发生崩溃
当实体开始与该断言添加和删除的场景,有时应用程序崩溃:
qt_assert:ASSERT: “IMG = nullptr” 文件 ../../include/Qt3DRender/ 5.8.0/Qt3DRender /私人/../../../../../的src /渲染/纹理/ 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);
如果有必要,我可以准备简单的例子来重现问题。
感谢。
我已经试过像这样删除它:'visibleObject-> setParent(nullptr);删除visibleObject;'但行为是一样的。无论如何,它似乎是Qt的bug(https://bugreports.qt.io/browse/QTBUG-59418)。 –