void Map::parentHeightChanged(float parentHeight) { const float padding = 10; // Padding of at least 10 on all sides. parentHeight = parentHeight - padding*2; const float cellWidth = m_mapWidth / m_cols; const float cellHeight = parentHeight / m_rows; float oldCellSize = m_cellSize; m_cellSize = std::min(cellWidth, cellHeight); m_mapArea->setPreferredSize(m_cellSize * m_cols, m_cellSize * m_rows); QObjectList list = m_mapArea->children(); if (m_rows * m_cols + 1 != list.count()) { qDebug("Uhoh: List size not correct!"); } int i=0; for (int y=0; y<m_rows; y++) { for (int x=0; x<m_cols; x++) { ImageView *cell = qobject_cast<ImageView*>(list[i]); if (cell) { cell->setPreferredSize(m_cellSize, m_cellSize); AbsoluteLayoutProperties *properties = static_cast<AbsoluteLayoutProperties*>(cell->layoutProperties()); properties->setPositionX(x * m_cellSize); properties->setPositionY(y * m_cellSize); } i++; } } Container *robot = qobject_cast<Container*>(list[i]); if (robot) { robot->setPreferredSize(m_cellSize, m_cellSize); AbsoluteLayoutProperties *properties = static_cast<AbsoluteLayoutProperties*>(robot->layoutProperties()); properties->setPositionX(properties->positionX() * m_cellSize / oldCellSize); properties->setPositionY(properties->positionY() * m_cellSize / oldCellSize); } }