File indexing completed on 2026-07-15 08:30:06
0001
0002
0003
0004
0005 #ifndef QLAYOUTITEM_H
0006 #define QLAYOUTITEM_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qsizepolicy.h>
0010 #include <QtCore/qrect.h>
0011
0012 #include <limits.h>
0013
0014 QT_BEGIN_NAMESPACE
0015
0016
0017 inline constexpr int QLAYOUTSIZE_MAX = INT_MAX/256/16;
0018
0019 class QLayout;
0020 class QLayoutItem;
0021 class QSpacerItem;
0022 class QWidget;
0023 class QSize;
0024
0025 class Q_WIDGETS_EXPORT QLayoutItem
0026 {
0027 public:
0028 inline explicit QLayoutItem(Qt::Alignment alignment = Qt::Alignment());
0029 virtual ~QLayoutItem();
0030 virtual QSize sizeHint() const = 0;
0031 virtual QSize minimumSize() const = 0;
0032 virtual QSize maximumSize() const = 0;
0033 virtual Qt::Orientations expandingDirections() const = 0;
0034 virtual void setGeometry(const QRect&) = 0;
0035 virtual QRect geometry() const = 0;
0036 virtual bool isEmpty() const = 0;
0037 virtual bool hasHeightForWidth() const;
0038 virtual int heightForWidth(int) const;
0039 virtual int minimumHeightForWidth(int) const;
0040 virtual void invalidate();
0041
0042 virtual QWidget *widget() const;
0043 virtual QLayout *layout();
0044 virtual QSpacerItem *spacerItem();
0045
0046 Qt::Alignment alignment() const { return align; }
0047 void setAlignment(Qt::Alignment a);
0048 virtual QSizePolicy::ControlTypes controlTypes() const;
0049
0050 protected:
0051 Qt::Alignment align;
0052 };
0053
0054 inline QLayoutItem::QLayoutItem(Qt::Alignment aalignment)
0055 : align(aalignment) { }
0056
0057 class Q_WIDGETS_EXPORT QSpacerItem : public QLayoutItem
0058 {
0059 public:
0060 QSpacerItem(int w, int h,
0061 QSizePolicy::Policy hData = QSizePolicy::Minimum,
0062 QSizePolicy::Policy vData = QSizePolicy::Minimum)
0063 : width(w), height(h), sizeP(hData, vData) { }
0064 ~QSpacerItem();
0065
0066 void changeSize(int w, int h,
0067 QSizePolicy::Policy hData = QSizePolicy::Minimum,
0068 QSizePolicy::Policy vData = QSizePolicy::Minimum);
0069 QSize sizeHint() const override;
0070 QSize minimumSize() const override;
0071 QSize maximumSize() const override;
0072 Qt::Orientations expandingDirections() const override;
0073 bool isEmpty() const override;
0074 void setGeometry(const QRect&) override;
0075 QRect geometry() const override;
0076 QSpacerItem *spacerItem() override;
0077 QSizePolicy sizePolicy() const { return sizeP; }
0078
0079 private:
0080 int width;
0081 int height;
0082 QSizePolicy sizeP;
0083 QRect rect;
0084 };
0085
0086 class Q_WIDGETS_EXPORT QWidgetItem : public QLayoutItem
0087 {
0088 Q_DISABLE_COPY(QWidgetItem)
0089
0090 public:
0091 explicit QWidgetItem(QWidget *w) : wid(w) { }
0092 ~QWidgetItem();
0093
0094 QSize sizeHint() const override;
0095 QSize minimumSize() const override;
0096 QSize maximumSize() const override;
0097 Qt::Orientations expandingDirections() const override;
0098 bool isEmpty() const override;
0099 void setGeometry(const QRect&) override;
0100 QRect geometry() const override;
0101 QWidget *widget() const override;
0102
0103 bool hasHeightForWidth() const override;
0104 int heightForWidth(int) const override;
0105 int minimumHeightForWidth(int) const override;
0106 QSizePolicy::ControlTypes controlTypes() const override;
0107 protected:
0108 QWidget *wid;
0109 };
0110
0111 class Q_WIDGETS_EXPORT QWidgetItemV2 : public QWidgetItem
0112 {
0113 public:
0114 explicit QWidgetItemV2(QWidget *widget);
0115 ~QWidgetItemV2();
0116
0117 QSize sizeHint() const override;
0118 QSize minimumSize() const override;
0119 QSize maximumSize() const override;
0120 int heightForWidth(int width) const override;
0121
0122 private:
0123 enum { Dirty = -123, HfwCacheMaxSize = 3 };
0124
0125 inline bool useSizeCache() const;
0126 void updateCacheIfNecessary() const;
0127 inline void invalidateSizeCache() {
0128 q_cachedMinimumSize.setWidth(Dirty);
0129 q_hfwCacheSize = 0;
0130 }
0131
0132 mutable QSize q_cachedMinimumSize;
0133 mutable QSize q_cachedSizeHint;
0134 mutable QSize q_cachedMaximumSize;
0135 mutable QSize q_cachedHfws[HfwCacheMaxSize];
0136 mutable short q_firstCachedHfw;
0137 mutable short q_hfwCacheSize;
0138 void *d;
0139
0140 friend class QWidgetPrivate;
0141
0142 Q_DISABLE_COPY(QWidgetItemV2)
0143 };
0144
0145 QT_END_NAMESPACE
0146
0147 #endif