详细描述
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模式,该属性使用于所有调整大小模式