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