File indexing completed on 2026-05-10 08:50:59
0001
0002
0003
0004
0005 #ifndef QHEADERVIEW_H
0006 #define QHEADERVIEW_H
0007
0008 #include <QtWidgets/qtwidgetsglobal.h>
0009 #include <QtWidgets/qabstractitemview.h>
0010 #include <QtCore/qlist.h>
0011
0012 QT_REQUIRE_CONFIG(itemviews);
0013
0014 class tst_QHeaderView;
0015
0016 QT_BEGIN_NAMESPACE
0017
0018 class QHeaderViewPrivate;
0019 class QStyleOptionHeader;
0020
0021 class Q_WIDGETS_EXPORT QHeaderView : public QAbstractItemView
0022 {
0023 Q_OBJECT
0024 Q_PROPERTY(bool firstSectionMovable READ isFirstSectionMovable WRITE setFirstSectionMovable)
0025 Q_PROPERTY(bool showSortIndicator READ isSortIndicatorShown WRITE setSortIndicatorShown)
0026 Q_PROPERTY(bool sectionsMovable READ sectionsMovable WRITE setSectionsMovable)
0027 Q_PROPERTY(bool sectionsClickable READ sectionsClickable WRITE setSectionsClickable)
0028 Q_PROPERTY(bool highlightSections READ highlightSections WRITE setHighlightSections)
0029 Q_PROPERTY(bool stretchLastSection READ stretchLastSection WRITE setStretchLastSection)
0030 Q_PROPERTY(bool cascadingSectionResizes READ cascadingSectionResizes
0031 WRITE setCascadingSectionResizes)
0032 Q_PROPERTY(int defaultSectionSize READ defaultSectionSize WRITE setDefaultSectionSize
0033 RESET resetDefaultSectionSize)
0034 Q_PROPERTY(int minimumSectionSize READ minimumSectionSize WRITE setMinimumSectionSize)
0035 Q_PROPERTY(int maximumSectionSize READ maximumSectionSize WRITE setMaximumSectionSize)
0036 Q_PROPERTY(Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment)
0037 Q_PROPERTY(bool sortIndicatorClearable READ isSortIndicatorClearable
0038 WRITE setSortIndicatorClearable NOTIFY sortIndicatorClearableChanged)
0039
0040 public:
0041
0042 enum ResizeMode
0043 {
0044 Interactive,
0045 Stretch,
0046 Fixed,
0047 ResizeToContents,
0048 Custom = Fixed
0049 };
0050 Q_ENUM(ResizeMode)
0051
0052 explicit QHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr);
0053 virtual ~QHeaderView();
0054
0055 void setModel(QAbstractItemModel *model) override;
0056
0057 Qt::Orientation orientation() const;
0058 int offset() const;
0059 int length() const;
0060 QSize sizeHint() const override;
0061 void setVisible(bool v) override;
0062 int sectionSizeHint(int logicalIndex) const;
0063
0064 int visualIndexAt(int position) const;
0065 int logicalIndexAt(int position) const;
0066
0067 inline int logicalIndexAt(int x, int y) const;
0068 inline int logicalIndexAt(const QPoint &pos) const;
0069
0070 int sectionSize(int logicalIndex) const;
0071 int sectionPosition(int logicalIndex) const;
0072 int sectionViewportPosition(int logicalIndex) const;
0073
0074 void moveSection(int from, int to);
0075 void swapSections(int first, int second);
0076 void resizeSection(int logicalIndex, int size);
0077 void resizeSections(QHeaderView::ResizeMode mode);
0078
0079 bool isSectionHidden(int logicalIndex) const;
0080 void setSectionHidden(int logicalIndex, bool hide);
0081 int hiddenSectionCount() const;
0082
0083 inline void hideSection(int logicalIndex);
0084 inline void showSection(int logicalIndex);
0085
0086 int count() const;
0087 int visualIndex(int logicalIndex) const;
0088 int logicalIndex(int visualIndex) const;
0089
0090 void setSectionsMovable(bool movable);
0091 bool sectionsMovable() const;
0092 void setFirstSectionMovable(bool movable);
0093 bool isFirstSectionMovable() const;
0094
0095 void setSectionsClickable(bool clickable);
0096 bool sectionsClickable() const;
0097
0098 void setHighlightSections(bool highlight);
0099 bool highlightSections() const;
0100
0101 ResizeMode sectionResizeMode(int logicalIndex) const;
0102 void setSectionResizeMode(ResizeMode mode);
0103 void setSectionResizeMode(int logicalIndex, ResizeMode mode);
0104
0105 void setResizeContentsPrecision(int precision);
0106 int resizeContentsPrecision() const;
0107
0108 int stretchSectionCount() const;
0109
0110 void setSortIndicatorShown(bool show);
0111 bool isSortIndicatorShown() const;
0112
0113 void setSortIndicator(int logicalIndex, Qt::SortOrder order);
0114 int sortIndicatorSection() const;
0115 Qt::SortOrder sortIndicatorOrder() const;
0116
0117 void setSortIndicatorClearable(bool clearable);
0118 bool isSortIndicatorClearable() const;
0119
0120 bool stretchLastSection() const;
0121 void setStretchLastSection(bool stretch);
0122
0123 bool cascadingSectionResizes() const;
0124 void setCascadingSectionResizes(bool enable);
0125
0126 int defaultSectionSize() const;
0127 void setDefaultSectionSize(int size);
0128 void resetDefaultSectionSize();
0129
0130 int minimumSectionSize() const;
0131 void setMinimumSectionSize(int size);
0132 int maximumSectionSize() const;
0133 void setMaximumSectionSize(int size);
0134
0135 Qt::Alignment defaultAlignment() const;
0136 void setDefaultAlignment(Qt::Alignment alignment);
0137
0138 void doItemsLayout() override;
0139 bool sectionsMoved() const;
0140 bool sectionsHidden() const;
0141
0142 #ifndef QT_NO_DATASTREAM
0143 QByteArray saveState() const;
0144 bool restoreState(const QByteArray &state);
0145 #endif
0146
0147 void reset() override;
0148
0149 public Q_SLOTS:
0150 void setOffset(int offset);
0151 void setOffsetToSectionPosition(int visualIndex);
0152 void setOffsetToLastSection();
0153 void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast);
0154
0155 Q_SIGNALS:
0156 void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex);
0157 void sectionResized(int logicalIndex, int oldSize, int newSize);
0158 void sectionPressed(int logicalIndex);
0159 void sectionClicked(int logicalIndex);
0160 void sectionEntered(int logicalIndex);
0161 void sectionDoubleClicked(int logicalIndex);
0162 void sectionCountChanged(int oldCount, int newCount);
0163 void sectionHandleDoubleClicked(int logicalIndex);
0164 void geometriesChanged();
0165 void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order);
0166 void sortIndicatorClearableChanged(bool clearable);
0167
0168 protected Q_SLOTS:
0169 void updateSection(int logicalIndex);
0170 void resizeSections();
0171 void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast);
0172 void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast);
0173
0174 protected:
0175 QHeaderView(QHeaderViewPrivate &dd, Qt::Orientation orientation, QWidget *parent = nullptr);
0176 void initialize();
0177
0178 void initializeSections();
0179 void initializeSections(int start, int end);
0180 void currentChanged(const QModelIndex ¤t, const QModelIndex &old) override;
0181
0182 bool event(QEvent *e) override;
0183 void paintEvent(QPaintEvent *e) override;
0184 void mousePressEvent(QMouseEvent *e) override;
0185 void mouseMoveEvent(QMouseEvent *e) override;
0186 void mouseReleaseEvent(QMouseEvent *e) override;
0187 void mouseDoubleClickEvent(QMouseEvent *e) override;
0188 bool viewportEvent(QEvent *e) override;
0189
0190 virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const;
0191 virtual QSize sectionSizeFromContents(int logicalIndex) const;
0192
0193 int horizontalOffset() const override;
0194 int verticalOffset() const override;
0195 void updateGeometries() override;
0196 void scrollContentsBy(int dx, int dy) override;
0197
0198 void dataChanged(const QModelIndex &topLeft, const QModelIndex &bottomRight,
0199 const QList<int> &roles = QList<int>()) override;
0200 void rowsInserted(const QModelIndex &parent, int start, int end) override;
0201
0202 QRect visualRect(const QModelIndex &index) const override;
0203 void scrollTo(const QModelIndex &index, ScrollHint hint) override;
0204
0205 QModelIndex indexAt(const QPoint &p) const override;
0206 bool isIndexHidden(const QModelIndex &index) const override;
0207
0208 QModelIndex moveCursor(CursorAction, Qt::KeyboardModifiers) override;
0209 void setSelection(const QRect& rect, QItemSelectionModel::SelectionFlags flags) override;
0210 QRegion visualRegionForSelection(const QItemSelection &selection) const override;
0211 virtual void initStyleOptionForIndex(QStyleOptionHeader *option, int logicalIndex) const;
0212 virtual void initStyleOption(QStyleOptionHeader *option) const;
0213
0214 friend class QTableView;
0215 friend class QTreeView;
0216 friend class ::tst_QHeaderView;
0217
0218 private:
0219 void initStyleOption(QStyleOptionFrame *option) const override;
0220
0221 Q_DECLARE_PRIVATE(QHeaderView)
0222 Q_DISABLE_COPY(QHeaderView)
0223 };
0224
0225 inline int QHeaderView::logicalIndexAt(int ax, int ay) const
0226 { return orientation() == Qt::Horizontal ? logicalIndexAt(ax) : logicalIndexAt(ay); }
0227 inline int QHeaderView::logicalIndexAt(const QPoint &apos) const
0228 { return logicalIndexAt(apos.x(), apos.y()); }
0229 inline void QHeaderView::hideSection(int alogicalIndex)
0230 { setSectionHidden(alogicalIndex, true); }
0231 inline void QHeaderView::showSection(int alogicalIndex)
0232 { setSectionHidden(alogicalIndex, false); }
0233
0234 QT_END_NAMESPACE
0235
0236 #endif