aaaaand I found the solution :
yippipi.jpg
icosphere.jpg
As you can see, the floor origin is now perfectly positionned (and fits with any mesh).
Solution in short :
handle the statusChanged signal once status == Qt3DRender::QMesh::Ready, the mesh is loaded BUT its bounding box is not (necessarily?) computed yet. I made this assumption and this was the mistake. handle the minExtentChanged signal by connecting it to a function ONLY ONCE status == Qt3DRender::QMesh::Ready update the plane position in this functionHere is the final code :
void MyScene::handleStatusChanged(const Qt3DRender::QMesh::Status &status) { if(status == Qt3DRender::QMesh::Ready) { connect(mesh.geometry(), &Qt3DCore::QGeometry::minExtentChanged, this, &MyScene::handleMinExtentChanged); } } void MyScene::handleMinExtentChanged(const QVector3D & minExtent) { Qt3DCore::QTransform * planeTransform = new Qt3DCore::QTransform(&floorEntity); planeTransform->setTranslation(QVector3D(0.0f,mesh.geometry()->minExtent().y(),0.0f)); floorEntity.addComponent(planeTransform); }More details
I was mistaken by the Qt3DRender::QMesh::Ready status : the fact that the QMesh is flagged as "Ready" does not mean that its bounding box is computed.
Indeed, minExtent and maxExtent values are set by the function setExtent in qgeometry.cpp. By setting one breakpoint in setExtent and one breakpoint in the if statement of handleStatusChanged, you will observe that the if statement breakpoint is triggered the first. That is, even thought the QMesh is "Ready", it's extents are not yet set.
Furthermore, you have to wait for the QMesh to be "Ready" before connecting to the minExtentChanged signal because before that, the QGeometry associated to mesh is not set. You cannot connect to mesh.geometry() immediatly after a call to setSource because the QGeometry it points to is nullptr, and change only once the QMesh is "Ready". That's the reason why I'm connecting only in the if statement of handleStatusChanged
Hopefully this will help some people.
PS : I still do not understand how to use updateImplicitBounds(), but I'm done with my issue here.