1// Copyright (C) 2016 The Qt Company Ltd.
2// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR LGPL-3.0-only OR GPL-2.0-only OR GPL-3.0-only
3
4#ifndef QLAYOUT_H
5#define QLAYOUT_H
6
7#include <QtWidgets/qtwidgetsglobal.h>
8#include <QtCore/qobject.h>
9#include <QtWidgets/qlayoutitem.h>
10#include <QtWidgets/qsizepolicy.h>
11#include <QtCore/qrect.h>
12#include <QtCore/qmargins.h>
13
14#include <limits.h>
15
16QT_BEGIN_NAMESPACE
17
18
19class QLayout;
20class QSize;
21
22
23class QLayoutPrivate;
24
25class Q_WIDGETS_EXPORT QLayout : public QObject, public QLayoutItem
26{
27 Q_OBJECT
28 Q_DECLARE_PRIVATE(QLayout)
29
30 Q_PROPERTY(int spacing READ spacing WRITE setSpacing)
31 Q_PROPERTY(QMargins contentsMargins READ contentsMargins WRITE setContentsMargins
32 RESET unsetContentsMargins)
33
34 Q_PROPERTY(SizeConstraint sizeConstraint READ sizeConstraint WRITE setSizeConstraint)
35 Q_PROPERTY(SizeConstraint horizontalSizeConstraint READ horizontalSizeConstraint WRITE setHorizontalSizeConstraint)
36 Q_PROPERTY(SizeConstraint verticalSizeConstraint READ verticalSizeConstraint WRITE setVerticalSizeConstraint)
37
38public:
39 enum SizeConstraint {
40 SetDefaultConstraint,
41 SetNoConstraint,
42 SetMinimumSize,
43 SetFixedSize,
44 SetMaximumSize,
45 SetMinAndMaxSize
46 };
47 Q_ENUM(SizeConstraint)
48
49 explicit QLayout(QWidget *parent = nullptr);
50 ~QLayout();
51
52 virtual int spacing() const;
53 virtual void setSpacing(int);
54
55 void setContentsMargins(int left, int top, int right, int bottom);
56 void setContentsMargins(const QMargins &margins);
57 void unsetContentsMargins();
58 void getContentsMargins(int *left, int *top, int *right, int *bottom) const;
59 QMargins contentsMargins() const;
60 QRect contentsRect() const;
61
62 bool setAlignment(QWidget *w, Qt::Alignment alignment);
63 bool setAlignment(QLayout *l, Qt::Alignment alignment);
64 using QLayoutItem::setAlignment;
65
66 void setSizeConstraint(SizeConstraint constraint);
67 SizeConstraint sizeConstraint() const;
68
69 void setSizeConstraints(SizeConstraint horizontal, SizeConstraint vertical);
70
71 void setHorizontalSizeConstraint(SizeConstraint constraint);
72 SizeConstraint horizontalSizeConstraint() const;
73
74 void setVerticalSizeConstraint(SizeConstraint constraint);
75 SizeConstraint verticalSizeConstraint() const;
76
77 void setMenuBar(QWidget *w);
78 QWidget *menuBar() const;
79
80 QWidget *parentWidget() const;
81
82 void invalidate() override;
83 QRect geometry() const override;
84 bool activate();
85 void update();
86
87 void addWidget(QWidget *w);
88 virtual void addItem(QLayoutItem *) = 0;
89
90 void removeWidget(QWidget *w);
91 void removeItem(QLayoutItem *);
92
93 Qt::Orientations expandingDirections() const override;
94 QSize minimumSize() const override;
95 QSize maximumSize() const override;
96 virtual void setGeometry(const QRect&) override;
97 virtual QLayoutItem *itemAt(int index) const = 0;
98 virtual QLayoutItem *takeAt(int index) = 0;
99 virtual int indexOf(const QWidget *) const;
100 virtual int indexOf(const QLayoutItem *) const;
101 virtual int count() const = 0;
102 bool isEmpty() const override;
103 QSizePolicy::ControlTypes controlTypes() const override;
104
105 virtual QLayoutItem *replaceWidget(QWidget *from, QWidget *to,
106 Qt::FindChildOptions options = Qt::FindChildrenRecursively);
107
108 int totalMinimumHeightForWidth(int w) const;
109 int totalHeightForWidth(int w) const;
110 QSize totalMinimumSize() const;
111 QSize totalMaximumSize() const;
112 QSize totalSizeHint() const;
113 QLayout *layout() override;
114
115 void setEnabled(bool);
116 bool isEnabled() const;
117
118
119 static QSize closestAcceptableSize(const QWidget *w, const QSize &s);
120
121protected:
122 void widgetEvent(QEvent *);
123 void childEvent(QChildEvent *e) override;
124 void addChildLayout(QLayout *l);
125 void addChildWidget(QWidget *w);
126 bool adoptLayout(QLayout *layout);
127
128 QRect alignmentRect(const QRect&) const;
129protected:
130 QLayout(QLayoutPrivate &d, QLayout*, QWidget*);
131
132private:
133 Q_DISABLE_COPY(QLayout)
134
135 static void activateRecursiveHelper(QLayoutItem *item);
136
137 friend class QApplicationPrivate;
138 friend class QWidget;
139
140};
141
142QT_END_NAMESPACE
143
144//### support old includes
145#include <QtWidgets/qboxlayout.h>
146#include <QtWidgets/qgridlayout.h>
147
148#endif // QLAYOUT_H
149

source code of qtbase/src/widgets/kernel/qlayout.h