模型视图(13):【类】QHeaderView[官翻]

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()在单独的部分上设置。

ConstantValueDescription
Interactive0用户可以调整节的大小。还可以使用resizeSection()以编程方式调整该部分的大小。section大小默认为defaultSectionSize。(见cascadingSectionResizes。)
Stretch1QHeaderView将自动调整该部分的大小以填充可用空间。不能由用户或以编程方式更改大小。
Fixed2用户无法调整节的大小。只能使用resizeSection()以编程方式调整该节的大小。section大小默认为defaultSectionSize。
ResizeToContents3QHeaderView将根据整个列或行的内容自动将部分调整为最佳大小。不能由用户或以编程方式更改大小。(这个值在4.2中引入)

属性

  1. cascadingSectionResizes: bool 用户调整节到其最小后,是否将交互式调整级联到以下节
  2. defaultAlignment: Qt::Alignment
  3. defaultSectionSize: int
  4. firstSectionMovable: bool
  5. highlightSections: bool
  6. maximumSectionSize: int
  7. minimumSectionSize: int
  8. showSortIndicator: bool
  9. stretchLastSection: bool false

公共函数

构造析构

  1. QHeaderView(Qt::Orientation orientation, QWidget *parent = nullptr)
  2. virtual ~QHeaderView()
  3. void swapSections(int first, int second)

属性

  1. Qt::Orientation orientation() const
  2. int offset() const
  3. int logicalIndex(int visualIndex) const
  4. int logicalIndexAt(int position) const
  5. int logicalIndexAt(int x, int y) const
  6. int logicalIndexAt(const QPoint &pos) const
  7. int count() const
  8. int length() const

状态保存和恢复

  1. bool restoreState(const QByteArray &state)
  2. QByteArray saveState() const

拉伸

  1. bool stretchLastSection() const
  2. void setStretchLastSection(bool stretch)
  3. int stretchSectionCount() const

默认

  1. Qt::Alignment defaultAlignment() const
  2. void setDefaultAlignment(Qt::Alignment alignment)
  3. int defaultSectionSize() const
  4. void setDefaultSectionSize(int size)
  5. void resetDefaultSectionSize()

显示和隐藏

  1. int hiddenSectionCount() const
  2. void hideSection(int logicalIndex)
  3. bool isSectionHidden(int logicalIndex) const
  4. void setSectionHidden(int logicalIndex, bool hide)
  5. bool sectionsHidden() const
  6. void showSection(int logicalIndex)
  7. int visualIndex(int logicalIndex) const
  8. int visualIndexAt(int position) const

高亮

  1. bool highlightSections() const
  2. void setHighlightSections(bool highlight)

调整大小

  1. int maximumSectionSize() const
  2. void setMaximumSectionSize(int size)
  3. int minimumSectionSize() const
  4. void setMinimumSectionSize(int size)
  5. QHeaderView::ResizeMode sectionResizeMode(int logicalIndex) const
  6. void setSectionResizeMode(QHeaderView::ResizeMode mode)
  7. void setSectionResizeMode(int logicalIndex, QHeaderView::ResizeMode mode)
  8. bool cascadingSectionResizes() const
  9. void setCascadingSectionResizes(bool enable)
  10. void resizeSection(int logicalIndex, int size)
  11. void resizeSections(QHeaderView::ResizeMode mode)
  12. int resizeContentsPrecision() const
  13. void setResizeContentsPrecision(int precision)
  14. int sectionSize(int logicalIndex) const
  15. int sectionSizeHint(int logicalIndex) const
  16. int sectionPosition(int logicalIndex) const
  17. int sectionViewportPosition(int logicalIndex) const

点击

  1. bool sectionsClickable() const
  2. void setSectionsClickable(bool clickable)

移动

  1. bool isFirstSectionMovable() const
  2. void setFirstSectionMovable(bool movable)
  3. void moveSection(int from, int to)
  4. bool sectionsMovable() const
  5. void setSectionsMovable(bool movable)
  6. bool sectionsMoved() const

排序

  1. Qt::SortOrder sortIndicatorOrder() const
  2. int sortIndicatorSection() const
  3. bool isSortIndicatorShown() const
  4. void setSortIndicator(int logicalIndex, Qt::SortOrder order)
  5. void setSortIndicatorShown(bool show)

重新实现的公共函数

  1. virtual void reset() override
  2. virtual void setModel(QAbstractItemModel *model) override
  3. virtual void setVisible(bool v) override
  4. virtual QSize sizeHint() const override

公共槽

  1. void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast)
  2. void setOffset(int offset)
  3. void setOffsetToLastSection()
  4. void setOffsetToSectionPosition(int visualSectionNumber)

信号

  1. void geometriesChanged()
  2. void sectionClicked(int logicalIndex)
  3. void sectionCountChanged(int oldCount, int newCount)
  4. void sectionDoubleClicked(int logicalIndex)
  5. void sectionEntered(int logicalIndex)
  6. void sectionHandleDoubleClicked(int logicalIndex)
  7. void sectionMoved(int logicalIndex, int oldVisualIndex, int newVisualIndex)
  8. void sectionPressed(int logicalIndex)
  9. void sectionResized(int logicalIndex, int oldSize, int newSize)
  10. void sortIndicatorChanged(int logicalIndex, Qt::SortOrder order)

受保护的函数

  1. void initStyleOption(QStyleOptionHeader *option) const
  2. virtual void paintSection(QPainter *painter, const QRect &rect, int logicalIndex) const
  3. virtual QSize sectionSizeFromContents(int logicalIndex) const

重新实现的受保护的函数

  1. virtual void currentChanged(const QModelIndex &current, const QModelIndex &old) override
  2. virtual bool event(QEvent *e) override
  3. virtual int horizontalOffset() const override
  4. virtual void mouseDoubleClickEvent(QMouseEvent *e) override
  5. virtual void mouseMoveEvent(QMouseEvent *e) override
  6. virtual void mousePressEvent(QMouseEvent *e) override
  7. virtual void mouseReleaseEvent(QMouseEvent *e) override
  8. virtual void paintEvent(QPaintEvent *e) override
  9. virtual void setSelection(const QRect &rect, QItemSelectionModel::SelectionFlags flags) override
  10. virtual int verticalOffset() const override
  11. virtual bool viewportEvent(QEvent *e) override

受保护的槽

  1. void resizeSections()
  2. void sectionsAboutToBeRemoved(const QModelIndex &parent, int logicalFirst, int logicalLast)
  3. void sectionsInserted(const QModelIndex &parent, int logicalFirst, int logicalLast)
  • 0
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值