55 : QLayout(parent), m_hSpace(hSpacing), m_vSpace(vSpacing)
57 setContentsMargins(margin, margin, margin, margin);
61 : m_hSpace(hSpacing), m_vSpace(vSpacing)
63 setContentsMargins(margin, margin, margin, margin);
71 while ((item =
takeAt(0))) {
80 itemList.append(item);
90 return smartSpacing(QStyle::PM_LayoutHorizontalSpacing);
99 return smartSpacing(QStyle::PM_LayoutVerticalSpacing);
107 return itemList.size();
112 return itemList.value(index);
117 if (index >= 0 && index < itemList.size()) {
118 return itemList.takeAt(index);
128#if QT_VERSION >= QT_VERSION_CHECK(5, 15, 0)
143 int height = doLayout(QRect(0, 0, width, 0),
true);
149 QLayout::setGeometry(rect);
150 doLayout(rect,
false);
162 foreach (item, itemList)
163 size = size.expandedTo(item->minimumSize());
165 size += QSize(2*margin(), 2*margin());
169int FlowLayout::doLayout(
const QRect &rect,
bool testOnly)
const
171 int left, top, right, bottom;
172 getContentsMargins(&left, &top, &right, &bottom);
173 QRect effectiveRect = rect.adjusted(+left, +top, -right, -bottom);
174 int x = effectiveRect.x();
175 int y = effectiveRect.y();
179 foreach (item, itemList) {
180 QWidget *wid = item->widget();
183 spaceX = wid->style()->layoutSpacing(
184 QSizePolicy::PushButton,
185 QSizePolicy::PushButton,
190 spaceY = wid->style()->layoutSpacing(
191 QSizePolicy::PushButton,
192 QSizePolicy::PushButton,
196 int nextX = x + item->sizeHint().width() + spaceX;
197 if (nextX - spaceX > effectiveRect.right() && lineHeight > 0) {
198 x = effectiveRect.x();
199 y = y + lineHeight + spaceY;
200 nextX = x + item->sizeHint().width() + spaceX;
205 item->setGeometry(QRect(QPoint(x, y), item->sizeHint()));
209 lineHeight = qMax(lineHeight, item->sizeHint().height());
211 return y + lineHeight - rect.y() + bottom;
214int FlowLayout::smartSpacing(QStyle::PixelMetric pm)
const
216 QObject *parent = this->parent();
219 }
else if (parent->isWidgetType()) {
220 auto* pw =
static_cast<QWidget *
>(parent);
221 return pw->style()->pixelMetric(pm,
nullptr, pw);
223 return static_cast<QLayout *
>(parent)->spacing();
int horizontalSpacing() const
int verticalSpacing() const
int heightForWidth(int) const override
QLayoutItem * itemAt(int index) const override
QSize minimumSize() const override
bool hasHeightForWidth() const override
int count() const override
QSize sizeHint() const override
void setGeometry(const QRect &rect) override
QLayoutItem * takeAt(int index) override
Qt::Orientations expandingDirections() const override
void addItem(QLayoutItem *item) override
FlowLayout(QWidget *parent, int margin=-1, int hSpacing=-1, int vSpacing=-1)
Original license follows: