Qt入门系列开发教程【高级控件篇】QTableView表格视图

举报
鱼酱 发表于 2022/02/25 13:11:41 2022/02/25
【摘要】 效果图 详细描述QTableView 实现了一个表格视图,用于显示模型中的项目。 此类用于提供以前由 QTable 类提供的标准表,但使用 Qt 的模型/视图架构提供的更灵活的方法。QTableView 类是模型/视图类之一,是 Qt 模型/视图框架的一部分。QTableView 实现了 QAbstractItemView 类定义的接口,以允许它显示从 QAbstractItemModel...

效果图

在这里插入图片描述

详细描述

QTableView 实现了一个表格视图,用于显示模型中的项目。 此类用于提供以前由 QTable 类提供的标准表,但使用 Qt 的模型/视图架构提供的更灵活的方法。
QTableView 类是模型/视图类之一,是 Qt 模型/视图框架的一部分。
QTableView 实现了 QAbstractItemView 类定义的接口,以允许它显示从 QAbstractItemModel 类派生的模型提供的数据。

  • 视觉外观

该表有一个可以使用verticalHeader() 函数获得的垂直表头,以及一个可以通过horizontalHeader() 函数获得的水平表头。 使用rowHeight()可以找到表格中每一行的高度; 同样,可以使用 columnWidth() 找到列的宽度。 由于这两个都是普通的小部件,您可以使用它们的 hide() 函数隐藏它们中的任何一个。
可以使用 hideRow()、hideColumn()、showRow() 和 showColumn() 隐藏和显示行和列。 可以使用 selectRow() 和 selectColumn() 选择它们。 该表将根据 showGrid 属性显示一个网格。
与其他项目视图中的项目一样,表格视图中显示的项目是使用标准委托呈现和编辑的。 但是,对于某些任务,有时能够在表格中插入小部件很有用。 使用 setIndexWidget() 函数为特定索引设置小部件,然后使用 indexWidget() 检索小部件。

在这里插入图片描述

默认情况下,表格中的单元格不会扩展以填充可用空间。您可以通过拉伸最后一个标题部分使单元格填充可用空间。 使用horizontalHeader() 或verticalHeader() 访问相关标题并设置标题的stretchLastSection 属性。
要根据每列或每行的空间需求分配可用空间,请调用视图的 resizeColumnsToContents() 或 resizeRowsToContents() 函数。

  • 导航

您可以通过用鼠标单击单元格或使用箭头键来浏览表格中的单元格。 因为 QTableView 默认启用 tabKeyNavigation,所以你也可以点击 Tab 和 Backtab 从一个单元格移动到另一个单元格。

  • 坐标系
    对于某些特殊形式的表格,能够在行和列索引以及小部件坐标之间进行转换是很有用的。 rowAt() 函数提供指定行视图内的 y 坐标; 行索引可用于通过 rowViewportPosition() 获取对应的 y 坐标。 columnAt() 和 columnViewportPosition() 函数提供 x 坐标和列索引之间的等效转换操作。

属性

  • cornerButtonEnabled : bool
    该属性保存左上角的按钮是否启用

  • gridStyle : Qt::PenStyle
    此属性保存用于绘制网格的画笔样式。

  • showGrid : bool
    该属性保存是否显示网格

  • sortingEnabled : bool
    此属性保存是否启用排序

  • wordWrap : bool
    此属性保存项目文本自动换行策略

API

//删除表格视图中的所有行和列跨度。
 void clearSpans()
 //返回内容坐标中给定 x 坐标 x 所在的列
 int columnAt(int x) const
 //合并单元格
 int columnSpan(int row, int column) const
 //返回给定列的内容坐标中的 x 坐标。
 int columnViewportPosition(int column) const
 //列宽度
 int columnWidth(int column) const
 //画笔样式
 Qt::PenStyle gridStyle() const
 //表头
 QHeaderView *horizontalHeader() const
 //是否隐藏列
 bool isColumnHidden(int column) const
 //左上角的按钮是否启用
 bool isCornerButtonEnabled() const
//是否隐藏行
 bool isRowHidden(int row) const
 //是否开启排序
 bool isSortingEnabled() const
 //获取第几行
 int rowAt(int y) const
 //获取行高
 int rowHeight(int row) const
//返回 (row, column) 处的表元素的行跨度。 默认值为 1。
 int rowSpan(int row, int column) const
 //返回给定行的内容坐标中的 y 坐标。
 int rowViewportPosition(int row) const
 //设置列隐藏
 void setColumnHidden(int column, bool hide)
 //设置列宽
 void setColumnWidth(int column, int width)
//启用保存左上角的按钮是
 void setCornerButtonEnabled(bool enable)
//设置画笔样式
 void setGridStyle(Qt::PenStyle style)
 //设置水平表头
 void setHorizontalHeader(QHeaderView *header)
//设置第几行行高
 void setRowHeight(int row, int height)
 //第几行显示或隐藏
 void setRowHidden(int row, bool hide)
//开启排序
 void setSortingEnabled(bool enable)
//合并单元格
 void setSpan(int row, int column, int rowSpanCount, int columnSpanCount)
//设置表头对象
 void setVerticalHeader(QHeaderView *header)
//设置换行策略
 void setWordWrap(bool on)
//显示网格
 bool showGrid() const
//获取垂直表头
 QHeaderView *verticalHeader() const
 //获取文本自动换行策略
 bool wordWrap() const

实现的公有虚函数

//返回与内容坐标中位置 pos 处的表项对应的模型项的索引位置。
 virtual QModelIndex indexAt(const QPoint &pos) const override
 //确保给定的索引在表格视图中可见,必要时滚动。
 virtual void scrollTo(const QModelIndex &index, QAbstractItemView::ScrollHint hint = EnsureVisible) override
 
 virtual void setModel(QAbstractItemModel *model) override
 
 virtual void setRootIndex(const QModelIndex &index) override
 virtual void setSelectionModel(QItemSelectionModel *selectionModel) override
 //返回给定索引占用的视口上的矩形。 如果索引隐藏在视图中,它将返回一个空 QRect。
 virtual QRect visualRect(const QModelIndex &index) const override

公有槽

//隐藏第几列
 void hideColumn(int column)
 //隐藏第几行
 void hideRow(int row)
 //根据用于呈现列中每个项目的委托的大小提示调整给定列的大小。
 void resizeColumnToContents(int column)
  //根据用于呈现所有项目的委托的大小提示调整给定列的大小。
 void resizeColumnsToContents()
 // 根据用于呈现列中每个项目的委托的大小提示调整给定行的大小。
 void resizeRowToContents(int row)
 //根据用于呈现所有项目的委托的大小提示调整给定行的大小。
 void resizeRowsToContents()
 //选择第几列
 void selectColumn(int column)
 //选择第几行
 void selectRow(int row)
 //设置显示网格
 void setShowGrid(bool show)
 //显示第几列
 void showColumn(int column)
 //显示第几行
 void showRow(int row)
// 第几列排序
 void sortByColumn(int column, Qt::SortOrder order)
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。