FemaLocalSoftware/sensorlayout.cpp
2024-11-28 21:34:00 +03:00

75 lines
2.2 KiB
C++

#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());
}
}