文章目录
QHeaderView 类
QHeaderView类为项目视图提供标题行或标题列。
Header: | #include < QHeaderView > |
---|---|
qmake: | QT += widgets |
Inherits: | QAbstractItemView |
Inherited By: |
详述
QHeaderView显示项目视图中使用的标题,比如QTableView和QTreeView类。它取代了Qt3的QHeader类,而QHeader类以前用于相同的目的,但是为了与项目视图类保持一致,它使用了Qt的模型/视图架构。
QHeaderView类是模型/视图类之一,是Qt的模型/视图框架的一部分。
头使用QAbstractItemModel::headerData()函数从模型中获取每个部分的数据。您可以通过使用QAbstractItemModel::setHeaderData()来设置数据。
每个标题都有一个orientation()和一些section,由count()函数给出。section指的是标题的一部分——可以是行,也可以是列,这取决于方向。
section可以使用moveSection()和resizeSection()移动和调整大小;还可以使用hideSection()和showSection()隐藏和显示它们。
头的每个部分由section ID描述,section ID由section()指定,可以位于头中的特定visualIndex()处。section可以使用setSortIndicator()设置排序指示符;这指示关联项视图中的项是否将按照部分给出的顺序排序。
对于水平标题,section相当于模型中的一列,而对于垂直标题,section相当于模型中的一行。
移动头的分节
头可以固定在适当的位置,也可以使用setSectionsMovable()使其移动。可以使用setSectionsClickable()使其可单击,并根据setSectionResizeMode()调整其大小。
注意:双击标题来调整部分大小只适用于可见的行。
如果用户移动了一个节,标题将会发出sectionMoved(),如果用户调整了一个节的大小,标题将会发出sectionresize(),如果点击鼠标,标题将会发出sectionHandleDoubleClicked()。头文件还会发出sectionCountChanged()。
可以使用logicalIndex()和logicalIndexAt()函数标识节,也可以使用visualIndex()和visualIndexAt()函数标识节的索引位置。如果一个节被移动,视觉索引将会改变,但是逻辑索引不会改变。
外观
QTableWidget和QTableView创建默认标头。如果您希望header是可见的,可以使用setVisible()。
并不是所有的ItemDataRoles都会对QHeaderView产生影响。如果需要绘制其他角色,可以子类化QHeaderView并重新实现paintEvent()。QHeaderView尊重下列项数据角色,除非它们与样式冲突(桌面主题样式可能发生冲突):
TextAlignmentRole, DisplayRole, FontRole, DecorationRole, ForegroundRole和BackgroundRole。
注意:每个头呈现每个部分本身的数据,不依赖于委托。因此,调用header的setItemDelegate()函数将不起作用。
参见模型/视图编程,QListView, QTableView和QTreeView。
公共类型
enum ResizeMode
调整大小模式指定标题部分的行为。它可以在整个头视图或使用setSectionResizeMode()在单独的部分上设置。
Constant | Value | Description |
---|---|---|
Interactive | 0 | 用户可以调整节的大小。还可以使用resizeSection()以编程方式调整该部分的大小。section大小默认为defaultSectionSize。(见cascadingSectionResizes。) |
Stretch | 1 | QHeaderView将自动调整该部分的大小以填充可用空间。不能由用户或以编程方式更改大小。 |
Fixed | 2 | 用户无法调整节的大小。只能使用resizeSection()以编程方式调整该节的大小。section大小默认为defaultSectionSize。 |
ResizeToContents | 3 | QHeaderView将根据整个列或行的内容自动将部分调整为最佳大小。不能由用户或以编程方式更改大小。(这个值在4.2中引入) |
属性
- cascadingSectionResizes: bool 用户调整节到其最小后,是否将交互式调整级联到以下节
- defaultAlignment: Qt::Alignment
- defaultSectionSize: int
- firstSectionMovable: bool
- highlightSections: bool
- maximumSectionSize: int
- minimumSectionSize: int
- showSortIndicator: bool
- stretchLastSection: bool false
公共函数
构造析构
- QHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr)
- virtual ~QHeaderView()
- void swapSections(int first, int second)
属性
- Qt::Orientation orientation() const
- int offset() const
- int logicalIndex(int visualIndex) const
- int logicalIndexAt(int position) const
- int logicalIndexAt(int x, int y) const
- int logicalIndexAt(const QPoint &pos) const
- int count() const
- int length() const
状态保存和恢复
- bool restoreState(const QByteArray &state)
- QByteArray saveState() const
拉伸
- bool stretchLastSection() const
- void setStretchLastSection(bool stretch)
- int stretchSectionCount() const
默认
- Qt::Alignment defaultAlignment() const
- void setDefaultAlignment(Qt::Alignment alignment)
- int defaultSectionSize() const
- void setDefaultSectionSize(int size)
- void resetDefaultSectionSize()
显示和隐藏
- int hiddenSectionCount() const
- void hideSection(int logicalIndex)
- bool isSectionHidden(int logicalIndex) const
- void setSectionHidden(int logicalIndex, bool hide)
- bool sectionsHidden() const
- void showSection(int logicalIndex)
- int visualIndex(int logicalIndex) const
- int visualIndexAt(int position) const
高亮
- bool highlightSections() const
- void setHighlightSections(bool highlight)
调整大小
- int maximumSectionSize() const
- void setMaximumSectionSize(int size)
- int minimumSectionSize() const
- void setMinimumSectionSize(int size)
- QHeaderView::ResizeMode sectionResizeMode(int logicalIndex) const
- void setSectionResizeMode(QHeaderView::ResizeMode mode)
- void setSectionResizeMode(int logicalIndex, QHeaderView::ResizeMode mode)
- bool cascadingSectionResizes() const
- void setCascadingSectionResizes(bool enable)
- void resizeSection(int logicalIndex, int size)
- void resizeSections(QHeaderView::ResizeMode mode)
- int resizeContentsPrecision() const
- void setResizeContentsPrecision(int precision)
- int sectionSize(int logicalIndex) const
- int sectionSizeHint(int logicalIndex) const
- int sectionPosition(int logicalIndex) const
- int sectionViewportPosition(int logicalIndex) const
点击
- bool sectionsClickable() const
- void setSectionsClickable(bool clickable)
移动
- bool isFirstSectionMovable() const
- void setFirstSectionMovable(bool movable)
- void moveSection(int from, int to)
- bool sectionsMovable() const
- void setSectionsMovable(bool movable)
- bool sectionsMoved() const
排序
- Qt::SortOrder sortIndicatorOrder() const
- int sortIndicatorSection() const
- bool isSortIndicatorShown() const
- void setSortIndicator(int logicalIndex, Qt::SortOrder order)
- void setSortIndicatorShown(bool show)
重新实现的公共函数
- virtual void reset() override
- virtual void setModel(QAbstractItemModel *model) override
- virtual void setVisible(bool v) override
- virtual QSize sizeHint() const override
公共槽
- void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast)
- void setOffset(int offset)
- void setOffsetToLastSection()
- void setOffsetToSectionPosition(int visualSectionNumber)
信号
- void geometriesChanged()
- void sectionClicked(int logicalIndex)
- void sectionCountChanged(int oldCount, int newCount)
- void sectionDoubleClicked(int logicalIndex)
- void sectionEntered(int logicalIndex)
- void sectionHandleDoubleClicked(int logicalIndex)
- void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)
- void sectionPressed(int logicalIndex)
- void sectionResized(int logicalIndex, int oldSize, int newSize)
- void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order)
受保护的函数
- void initStyleOption(QStyleOptionHeader *option) const
- virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
- virtual QSize sectionSizeFromContents(int logicalIndex) const
重新实现的受保护的函数
- virtual void currentChanged(const QModelIndex ¤t, const QModelIndex &old) override
- virtual bool event(QEvent *e) override
- virtual int horizontalOffset() const override
- virtual void mouseDoubleClickEvent(QMouseEvent *e) override
- virtual void mouseMoveEvent(QMouseEvent *e) override
- virtual void mousePressEvent(QMouseEvent *e) override
- virtual void mouseReleaseEvent(QMouseEvent *e) override
- virtual void paintEvent(QPaintEvent *e) override
- virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) override
- virtual int verticalOffset() const override
- virtual bool viewportEvent(QEvent *e) override
受保护的槽
- void resizeSections()
- void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)
- void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast)