実行時に作成および削除するエンティティがあります。エンティティにはマテリアルとメッシュコンポーネントのみがあります。マテリアルは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); delete visibleObject; 'の動作は同じです。とにかく、Qtバグ(https://bugreports.qt.io/browse/QTBUG-59418)のようです。 –