75 lines
2.2 KiB
C++
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());
|
|
}
|
|
}
|