Qt模型视图框架:QHeaderView

一、描述

QHeaderView 显示项目视图(如QTableViewQTreeView)中使用的标题。

标头使用 QAbstractItemModel::headerData() 函数从模型中获取每个部分的数据。可以使用 QAbstractItemModel::setHeaderData() 设置数据。

对于水平标题,该部分相当于模型中的一列,对于垂直标题,该部分相当于模型中的一行。

移动标题部分

标题可以固定到位,也可以使用 setSectionsMovable() 移动。它可以通过 setSectionsClickable() 设置为可点击,并根据 setSectionResizeMode() 具有调整大小的行为。

外观

QTableWidget QTableView 会创建默认标题。如果希望标题可见,调用 setVisible()。

并非所有 ItemDataRoles 都会对 QHeaderView 产生影响。 如果需要绘制其他角色,可以继承QHeaderView,重新实现paintEvent()。 QHeaderView 可用以下项目数据角色,除非它们与样式冲突(这可能发生在遵循桌面主题的样式中):

  • TextAlignmentRole
  • DisplayRole
  • FontRole
  • DecorationRole
  • ForegroundRole
  • BackgroundRole

注意:每个标头为每个部分本身呈现数据,并且不依赖于委托。 因此,调用标头的 setItemDelegate() 函数将不起作用。


二、类型成员

1、enum QHeaderView::ResizeMode:调整大小模式指定标题部分的行为。

  • Interactive:用户可以调整节的大小。也可以使用 resizeSection() 以编程方式调整该部分的大小。
  • Fixed:用户无法调整该部分的大小。该部分只能使用 resizeSection() 以编程方式调整大小。 
  • Stretch:将自动调整该部分的大小以填充可用空间。 用户或以编程方式无法更改大小。
  • ResizeToContents:将根据整列或整行的内容自动将节调整为最佳大小。 用户或以编程方式无法更改大小。 

三、属性成员

1、cascadingSectionResizes : bool

此属性保存一旦用户调整大小的部分达到其最小大小,交互式调整大小是否影响其他部分。

此属性仅影响将 Interactive 作为其调整大小模式的部分。

默认值为false。

    QTableView view;
    QStandardItemModel *model = new QStandardItemModel(&view);
    model->setColumnCount(3);
    model->setRowCount(3);

    QHeaderView * header = new QHeaderView(Qt::Horizontal);
    header->setSectionResizeMode(QHeaderView::Interactive);
    header->setCascadingSectionResizes(false);

    view.setHorizontalHeader(header);

    for (int i = 0;i < 3;++i)
    {
        for (int j = 0;j < 3;++j)
        {
            model->setData(model->index(i,j),"data");
        }
    }

    view.setModel(model);
    view.show();

    header->setCascadingSectionResizes(true);

 2、defaultAlignment : Qt::Alignment

此属性保存每个标题部分中文本的默认对齐方式。

3、defaultSectionSize : int

此属性在调整大小之前保存标题部分的默认大小。

此属性仅影响将 Interactive Fixed 作为其调整大小模式的部分。

默认情况下,此属性的值取决于样式。因此,当样式更改时,此属性会随之更新。调用 setDefaultSectionSize() 停止更新,调用 resetDefaultSectionSize() 将恢复默认行为。

4、firstSectionMovable : bool

该属性保存第一列是否可以被用户移动。

此属性控制用户是否可以移动第一列。

QTreeView 中,第一列包含树结构,因此默认情况下是不可移动的,即使在 setSectionsMovable(true) 之后也是如此。通过调用此方法,它可以再次移动。在这种情况下,建议同时调用QTreeView::setRootIsDecorated(false)。

除非 setSectionsMovable(true) 也被调用,否则将其设置为 true 并不起作用。

5、highlightSections : bool

此属性保存是否突出显示包含所选项目的部分。默认为 false。

6、maximumSectionSize : int

此属性保存标题部分的最大大小。

此属性的默认值为 1048575,这也是最大大小。将最大值设置为 -1 会将值重置为最大大小。

stretch 外,所有调整大小模式都支持此属性。

7、minimumSectionSize : int

此属性保存标题部分的最小大小。

所有调整大小模式都支持此属性。

8、showSortIndicator : bool

此属性保存是否显示排序指示器。默认为 false。

9、sortIndicatorClearable : bool

此属性保存是否可以通过多次单击某个部分来清除排序指示器。

通常,单击某个部分只会更改该部分的排序顺序。通过将此属性设置为true,排序指示器将在升序和降序交替后清除。这通常会恢复模型的原始排序。

将此属性设置为 true 无效,除非sectionClickable() 也为true。

10、stretchLastSection : bool

此属性保存标题中最后一个可见部分是否占用所有可用空间。默认值为false。

如果此值设置为 true,则此属性将覆盖标题中最后一部分设置的调整大小模式。

注意: QTreeView 提供的水平标题配置为将此属性设置为 true,以确保视图不会浪费为其标题分配的任何空间。


四、成员函数

4.1、信号

1、void geometriesChanged()

当标题的几何形状发生变化时,会发出此信号。

2、void sectionClicked(int logicalIndex)

单击某个部分时会发出此信号。

请注意,sectionPressed() 信号也将被发出。

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)

当包含排序指示符或指示的顺序的部分发生更改时,会发出此信号。

4.2、函数

1、void headerDataChanged(Qt::Orientation orientation, int logicalFirst, int logicalLast)

使用给定的方向更新已更改的标题部分,从logicalFirst 到logicalLast 包含在内。

2、void setOffset(int offset)

 设置标头的偏移量。

3、void setOffsetToLastSection() 

设置偏移量以使最后一个部分可见。

4、int count()

标题节数。

5、int hiddenSectionCount()

返回标题中已隐藏的节数。

6、void hideSection(int logicalIndex)  / void showSection(int logicalIndex)

隐藏/显示由 logicalIndex 指定的部分。

7、bool isSectionHidden(int logicalIndex)

某部分是否已经隐藏。

 8、int length()

返回沿标题方向的长度。

9、QByteArray saveState() / bool restoreState(const QByteArray &state)

保存/恢复标题状态。

10、int sectionSize(int logicalIndex)

返回给定逻辑索引的宽度(或垂直标题的高度)。

11、void setResizeContentsPrecision(int precision)

设置使用 ResizeToContents 时计算大小的精确度。较低的值将提供不太准确但快速的自动调整大小,而较高的值将提供更准确的调整大小,但可能会很慢。

默认值为 1000,这意味着在执行自动调整大小时,具有自动调整大小的水平列将在计算时查看最多 1000 行。

 12、void swapSections(int first, int second)

交换两部分。

  • 11
    点赞
  • 73
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值