#include "sensorlayout.h" SensorLayout::SensorLayout(QWidget *parent) : QLayout(parent) {} SensorLayout::~SensorLayout() { while (!items.isEmpty()) delete items.takeFirst(); } void SensorLayout::addItem(QLayoutItem *item) { items.append(item); } QSize SensorLayout::sizeHint() const { return QSize(400, 400); // Базовый размер } QSize SensorLayout::minimumSize() const { return QSize(200, 200); // Минимальный размер } int SensorLayout::count() const { return items.size(); } QLayoutItem *SensorLayout::itemAt(int index) const { return items.value(index); } QLayoutItem *SensorLayout::takeAt(int index) { if (index >= 0 && index < items.size()) return items.takeAt(index); return nullptr; } void SensorLayout::setGeometry(const QRect &rect) { QLayout::setGeometry(rect); int x = spacing; // Отступ слева int y = spacing; // Отступ сверху int maxWidth = rect.width(); // Максимальная ширина доступного пространства int rowHeight = 0; // Высота текущей строки for (QLayoutItem *item : qAsConst(items)) { QSize itemSize = item->sizeHint(); // Проверяем, помещается ли элемент в текущую строку if (x + itemSize.width() > maxWidth - spacing) { // Переход на новую строку x = spacing; // Сбрасываем горизонтальное положение y += rowHeight + spacing; // Увеличиваем вертикальное положение rowHeight = 0; // Сбрасываем высоту строки } // Устанавливаем элемент item->setGeometry(QRect(QPoint(x, y), itemSize)); // Обновляем `x` для следующего элемента x += itemSize.width() + spacing; // Высота строки обновляется, если текущий элемент выше rowHeight = qMax(rowHeight, itemSize.height()); } }