QHeaderView

详细描述

QHeaderView用于显示项目视图的标题,例如QTableView和QTreeView类。他取代了之前QT3用于相同目的的QHeader类,但是使用Qt的模型/视图体系结构与项目视图类保持一致。

QHeaderView类是模型/视图类之一,是Qt模型/视图框架的一部分。

表头通过 QAbstractItemModel::headerData()方法从模型中获取每个section的数据。通过QAbstractItemModel::setHeaderData()方法来设置数据。

每一个表头都有一个orientation()和若干section,由count()函数给出。section指的是表头的一部分,可以是行,也可以是列,得看其方向。

可以通过moveSection()和resizeSection()方法来移动section和设置section的大小;可以使用hideSection()和showSection()方法分别隐藏和显示section。

表头中的每个section都由其section()指定的section ID描述,并且可以位于表头中特定的visualIndex()中。section可以通过setSortIndicator()方法设置section的排序指示符;这标识关联项视图中的item是否按照该section给出的顺序排序。

对于水平表头,section相当于模型中的一列,对于垂直表头,section相当于模型中的一行。

移动表头的section

表头可以固定在适当的位置,也可以通过设置setSectionMovable()来移动。可以通过setSectionClickable()来设置section是否可点击,和通过setSectionResizeMode()方法来设置section调整大小的行为。
**注:**双击标题以调整section大小仅适用于可见行。

当用户移动一个section时,表头会发出sectionMoved()信号;调整大小时,发出sectionResized()信号;发出sectionClicked()和sectionhandledoubleclick ()信号响应鼠标点击事件。表头还有一个信号sectionCountChanged()。

可以使用logicalIndex()和logicalIndexAt()方法来标识一个section,或者使用visualIndex()和visualIndexAt()方法来标识section的索引位置。如果一个section被移动了,visual index将会变化,但是logicalIndex不会变化。

外观

QTableWidget and QTableView会默认创建一个表头。如果希望表头可见,可以通过setVisible()方法来设置。

不是所有的ItemDataRole都会对QHeaderView产生影响。如果你需要绘制其他角色,你可以继承QHeaderView并重写paintEvent()。

QHeaderView支持item的以下数据角色,除非他们与样式冲突(可能发生在遵循桌面主题的样式中):
TextAlignmentRole, DisplayRole, FontRole, DecorationRole, ForegroundRole, and BackgroundRole.。

**注:**每个表头都为每个section本身呈现数据,而不依赖于委托,所以调用表头的setItemDelegate()函数将不起作用。

属性说明

源码如下

    Q_PROPERTY(bool firstSectionMovable READ isFirstSectionMovable WRITE setFirstSectionMovable)
    Q_PROPERTY(bool showSortIndicator READ isSortIndicatorShown WRITE setSortIndicatorShown)
    Q_PROPERTY(bool highlightSections READ highlightSections WRITE setHighlightSections)
    Q_PROPERTY(bool stretchLastSection READ stretchLastSection WRITE setStretchLastSection)
    Q_PROPERTY(bool cascadingSectionResizes READ cascadingSectionResizes WRITE setCascadingSectionResizes)
    Q_PROPERTY(int defaultSectionSize READ defaultSectionSize WRITE setDefaultSectionSize RESET resetDefaultSectionSize)
    Q_PROPERTY(int minimumSectionSize READ minimumSectionSize WRITE setMinimumSectionSize)
    Q_PROPERTY(int maximumSectionSize READ maximumSectionSize WRITE setMaximumSectionSize)
    Q_PROPERTY(Qt::Alignment defaultAlignment READ defaultAlignment WRITE setDefaultAlignment)

cascadingSectionResizes : bool

当用户调整section的达到最小大小时,该属性决定是否将交互式调整大小联动到其下方的section。

该属性仅对resize模式为Interactive的section生效。
默认值是false。
bool cascadingSectionResizes() const
void setCascadingSectionResizes(bool enable)

defaultAlignment : Qt::Alignment

该属性决定每个section中文本的默认对齐方式。
Qt::Alignment defaultAlignment() const
void setDefaultAlignment(Qt::Alignment alignment)

defaultSectionSize : int

该属性决定每个section在重新设置大小之前的默认大小。
该属性仅对resize模式为Interactive或者Fixed的section生效。
默认情况下, 该属性的值与样式相关。因此,当样式更改时,该属性会更新。调用setDefaultSectionSize()可以停止其更新,调用resetDefaultSectionSize()恢复默认行为。
int defaultSectionSize() const
void setDefaultSectionSize(int size)
void resetDefaultSectionSize()

firstSectionMovable : bool

该属性决定第一列是否可以被用户移动。
在QTreeView中,第一列保存属性结构,因此默认情况下是不可移动的,只到用户调用setSectionMovable(true)。
它可以再次被设置为可移动,体力,在没有树结构的平面列表的情况下,通过调用此方法。在这种情况下,建议调用QTreeView::setRootIsdecorated(false)。
仅将该属性设置为true没有效果,除非setSectionMovable(true)也被调用。
bool isFirstSectionMovable() const
void setFirstSectionMovable(bool movable)

highlightSections : bool

该属性决定包含所选item的section是否高亮。
默认情况下,该属性是false。
bool highlightSections() const
void setHighlightSections(bool highlight)

maximumSectionSize : int

该属性决定section的最大尺寸
默认值为1048575,将maximum设置为-1将把值重置为最大的大小。
除stretch模式,该属性使用于所有调整大小模式

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值