QT QTableView控件 实时刷新显示
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT QTableView控件 实时刷新显示相关的知识,希望对你有一定的参考价值。
背景:QT编程,QTableView控件做数据库的显示
QTableView是这样创建的(tableView是QTableView创建的对象):
QStandardItemModel *model;
model=new QStandardItemModel();
ui->tableView->setModel(model);
向tableView里面写数据是使用model->setItem();来对tableView表里面的每一个item进行写。
问题:有大约两万行的数据,每行5列。那么需要执行10万次循环来执行model->setItem()函数,而且问题就在于在进行这10万次循环的时候,主程序是阻塞的,所以很慢。现在希望用什么方法可以给tableView写入100行然后就显示出来,然后每写入100行再显示出来,不阻塞主进程。
求大神解答……
Qt入门系列开发教程高级控件篇QTableView表格视图
效果图
详细描述
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)
以上是关于QT QTableView控件 实时刷新显示的主要内容,如果未能解决你的问题,请参考以下文章