File indexing completed on 2026-09-08 09:22:28
0001
0002
0003
0004
0005 #ifndef QFORMLAYOUT_H
0006 #define QFORMLAYOUT_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/QLayout>
0010
0011 QT_REQUIRE_CONFIG(formlayout);
0012
0013 QT_BEGIN_NAMESPACE
0014
0015
0016 class QFormLayoutPrivate;
0017
0018 class Q_WIDGETS_EXPORT QFormLayout : public QLayout
0019 {
0020 Q_OBJECT
0021 Q_DECLARE_PRIVATE(QFormLayout)
0022 Q_PROPERTY(FieldGrowthPolicy fieldGrowthPolicy READ fieldGrowthPolicy WRITE setFieldGrowthPolicy
0023 RESET resetFieldGrowthPolicy)
0024 Q_PROPERTY(RowWrapPolicy rowWrapPolicy READ rowWrapPolicy WRITE setRowWrapPolicy
0025 RESET resetRowWrapPolicy)
0026 Q_PROPERTY(Qt::Alignment labelAlignment READ labelAlignment WRITE setLabelAlignment
0027 RESET resetLabelAlignment)
0028 Q_PROPERTY(Qt::Alignment formAlignment READ formAlignment WRITE setFormAlignment
0029 RESET resetFormAlignment)
0030 Q_PROPERTY(int horizontalSpacing READ horizontalSpacing WRITE setHorizontalSpacing)
0031 Q_PROPERTY(int verticalSpacing READ verticalSpacing WRITE setVerticalSpacing)
0032
0033 public:
0034 enum FieldGrowthPolicy {
0035 FieldsStayAtSizeHint,
0036 ExpandingFieldsGrow,
0037 AllNonFixedFieldsGrow
0038 };
0039 Q_ENUM(FieldGrowthPolicy)
0040
0041 enum RowWrapPolicy {
0042 DontWrapRows,
0043 WrapLongRows,
0044 WrapAllRows
0045 };
0046 Q_ENUM(RowWrapPolicy)
0047
0048 enum ItemRole {
0049 LabelRole = 0,
0050 FieldRole = 1,
0051 SpanningRole = 2
0052 };
0053 Q_ENUM(ItemRole)
0054
0055 struct TakeRowResult {
0056 QLayoutItem *labelItem;
0057 QLayoutItem *fieldItem;
0058 };
0059
0060 explicit QFormLayout(QWidget *parent = nullptr);
0061 ~QFormLayout();
0062
0063 void setFieldGrowthPolicy(FieldGrowthPolicy policy);
0064 FieldGrowthPolicy fieldGrowthPolicy() const;
0065 void setRowWrapPolicy(RowWrapPolicy policy);
0066 RowWrapPolicy rowWrapPolicy() const;
0067 void setLabelAlignment(Qt::Alignment alignment);
0068 Qt::Alignment labelAlignment() const;
0069 void setFormAlignment(Qt::Alignment alignment);
0070 Qt::Alignment formAlignment() const;
0071
0072 void setHorizontalSpacing(int spacing);
0073 int horizontalSpacing() const;
0074 void setVerticalSpacing(int spacing);
0075 int verticalSpacing() const;
0076
0077 int spacing() const override;
0078 void setSpacing(int) override;
0079
0080 void addRow(QWidget *label, QWidget *field);
0081 void addRow(QWidget *label, QLayout *field);
0082 void addRow(const QString &labelText, QWidget *field);
0083 void addRow(const QString &labelText, QLayout *field);
0084 void addRow(QWidget *widget);
0085 void addRow(QLayout *layout);
0086
0087 void insertRow(int row, QWidget *label, QWidget *field);
0088 void insertRow(int row, QWidget *label, QLayout *field);
0089 void insertRow(int row, const QString &labelText, QWidget *field);
0090 void insertRow(int row, const QString &labelText, QLayout *field);
0091 void insertRow(int row, QWidget *widget);
0092 void insertRow(int row, QLayout *layout);
0093
0094 void removeRow(int row);
0095 void removeRow(QWidget *widget);
0096 void removeRow(QLayout *layout);
0097
0098 TakeRowResult takeRow(int row);
0099 TakeRowResult takeRow(QWidget *widget);
0100 TakeRowResult takeRow(QLayout *layout);
0101
0102 void setItem(int row, ItemRole role, QLayoutItem *item);
0103 void setWidget(int row, ItemRole role, QWidget *widget);
0104 void setLayout(int row, ItemRole role, QLayout *layout);
0105
0106 void setRowVisible(int row, bool on);
0107 void setRowVisible(QWidget *widget, bool on);
0108 void setRowVisible(QLayout *layout, bool on);
0109
0110 bool isRowVisible(int row) const;
0111 bool isRowVisible(QWidget *widget) const;
0112 bool isRowVisible(QLayout *layout) const;
0113
0114 QLayoutItem *itemAt(int row, ItemRole role) const;
0115 void getItemPosition(int index, int *rowPtr, ItemRole *rolePtr) const;
0116 void getWidgetPosition(QWidget *widget, int *rowPtr, ItemRole *rolePtr) const;
0117 void getLayoutPosition(QLayout *layout, int *rowPtr, ItemRole *rolePtr) const;
0118 QWidget *labelForField(QWidget *field) const;
0119 QWidget *labelForField(QLayout *field) const;
0120
0121
0122 void addItem(QLayoutItem *item) override;
0123 QLayoutItem *itemAt(int index) const override;
0124 QLayoutItem *takeAt(int index) override;
0125
0126 void setGeometry(const QRect &rect) override;
0127 QSize minimumSize() const override;
0128 QSize sizeHint() const override;
0129 void invalidate() override;
0130
0131 bool hasHeightForWidth() const override;
0132 int heightForWidth(int width) const override;
0133 Qt::Orientations expandingDirections() const override;
0134 int count() const override;
0135
0136 int rowCount() const;
0137
0138 #if 0
0139 void dump() const;
0140 #endif
0141
0142 private:
0143 void resetFieldGrowthPolicy();
0144 void resetRowWrapPolicy();
0145 void resetLabelAlignment();
0146 void resetFormAlignment();
0147 };
0148
0149 Q_DECLARE_TYPEINFO(QFormLayout::TakeRowResult, Q_PRIMITIVE_TYPE);
0150
0151 QT_END_NAMESPACE
0152
0153 #endif