12 : QLayout(parent), m_hSpace(hSpacing), m_vSpace(vSpacing) {
13 setContentsMargins(margin, margin, margin, margin);
17 : m_hSpace(hSpacing), m_vSpace(vSpacing) {
18 setContentsMargins(margin, margin, margin, margin);
25 while ((item =
takeAt(0)))
delete item;
34 return smartSpacing(QStyle::PM_LayoutHorizontalSpacing);
42 return smartSpacing(QStyle::PM_LayoutVerticalSpacing);
49 return itemList.value(index);
53 if (index >= 0 && index < itemList.size())
54 return itemList.takeAt(index);
60 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
61 return Qt::Orientations();
75 QLayout::setGeometry(rect);
76 doLayout(rect,
false);
84 foreach (item, itemList)
size =
size.expandedTo(item->minimumSize());
86 #if QT_VERSION >= QT_VERSION_CHECK(6, 0, 0)
87 QMargins margins = contentsMargins();
88 size += QSize(margins.left() + margins.right(),
89 margins.top() + margins.bottom());
91 size += QSize(2 * margin(), 2 * margin());
96 int FlowLayout::doLayout(
const QRect &rect,
bool testOnly)
const {
97 int left, top, right, bottom;
98 getContentsMargins(&left, &top, &right, &bottom);
99 QRect effectiveRect = rect.adjusted(+left, +top, -right, -bottom);
100 int x = effectiveRect.x();
101 int y = effectiveRect.y();
105 foreach (item, itemList) {
106 QWidget *wid = item->widget();
109 spaceX = wid->style()->layoutSpacing(QSizePolicy::PushButton,
110 QSizePolicy::PushButton,
114 spaceY = wid->style()->layoutSpacing(QSizePolicy::PushButton,
115 QSizePolicy::PushButton,
117 int nextX =
x + item->sizeHint().width() + spaceX;
118 if (nextX - spaceX > effectiveRect.right() && lineHeight > 0) {
119 x = effectiveRect.x();
120 y =
y + lineHeight + spaceY;
121 nextX =
x + item->sizeHint().width() + spaceX;
125 if (!testOnly) item->setGeometry(QRect(QPoint(
x,
y), item->sizeHint()));
128 lineHeight = qMax(lineHeight, item->sizeHint().height());
130 return y + lineHeight - rect.y() + bottom;
132 int FlowLayout::smartSpacing(QStyle::PixelMetric pm)
const {
133 QObject *parent = this->parent();
136 }
else if (parent->isWidgetType()) {
137 QWidget *pw =
static_cast<QWidget *
>(parent);
138 return pw->style()->pixelMetric(pm, 0, pw);
140 return static_cast<QLayout *
>(parent)->spacing();
Qt::Orientations expandingDirections() const Q_DECL_OVERRIDE
int horizontalSpacing() const
int verticalSpacing() const
void addItem(QLayoutItem *item) Q_DECL_OVERRIDE
QSize minimumSize() const Q_DECL_OVERRIDE
QLayoutItem * takeAt(int index) Q_DECL_OVERRIDE
void setGeometry(const QRect &rect) Q_DECL_OVERRIDE
QSize sizeHint() const Q_DECL_OVERRIDE
QLayoutItem * itemAt(int index) const Q_DECL_OVERRIDE
bool hasHeightForWidth() const Q_DECL_OVERRIDE
int heightForWidth(int) const Q_DECL_OVERRIDE
int count() const Q_DECL_OVERRIDE
FlowLayout(QWidget *parent, int margin=-1, int hSpacing=-1, int vSpacing=-1)