简介
QTableView类实现一个表视图,该视图显示模型中的项目。
此类用于提供以前由QTable类提供的标准表,但使用Qt的模型/视图体系结构提供的更灵活的方法。
QTableView类是Model / View类之一,并且是Qt 模型/视图框架的一部分。
QTableView实现了由QAbstractItemView类定义的接口,以允许其显示从QAbstractItemModel类派生的模型提供的数据。
导航
您可以通过使用鼠标单击某个单元格或使用箭头键来导航表中的单元格。由于QTableView 默认情况下启用tabKeyNavigation,因此您还可以单击Tab和Backtab在单元格之间移动。
视觉外观
该表具有可以使用verticalHeader()函数获得的垂直标题,以及可以通过horizontalHeader()函数获得的水平标题。可以使用rowHeight()找到表中每一行的高度;同样,可以使用columnWidth()找到列的宽度。由于这两个都是简单的小部件,因此您可以使用它们的hide()函数隐藏它们中的任何一个。
可以隐藏行和列,并使用hideRow(),hideColumn(),showRow()和showColumn()进行显示。可以使用selectRow()和selectColumn()来选择它们。该表将显示一个网格,具体取决于showGrid属性。
表格视图中显示的项目与其他项目视图中的项目一样,是使用标准委托渲染和编辑的。但是,对于某些任务,有时可以将小部件插入表中有时会很有用。使用setIndexWidget()函数为特定索引设置窗口小部件,然后使用indexWidget()进行检索。
默认情况下,表格中的单元格不会展开以填充可用空间。
您可以通过拉伸最后一个标题部分来使单元格填充可用空间。使用horizontalHeader()或verticalHeader()访问相关的标头,并设置标头的StretchLastSection属性。
要根据每列或每行的空间要求分配可用空间,请调用视图的resizeColumnsToContents()或resizeRowsToContents()函数。
坐标系
对于某些特殊形式的表,能够在行索引和列索引以及窗口小部件坐标之间进行转换非常有用。所述rowAt()函数提供的指定行的视图中的y坐标; 行索引可用于通过rowViewportPosition()获得相应的y坐标。所述columnAt()和columnViewportPosition()函数提供x坐标和列索引之间的等效转换操作。
简单示例
创建一个项目qtableview_demo1
设计窗体
在窗体中添加一个QTableView控件
修改代码mainwindow.cpp
#include "mainwindow.h"
#include "ui_mainwindow.h"
#include <QStandardItemModel>
#include <ctime>
MainWindow::MainWindow(QWidget *parent)
: QMainWindow(parent)
, ui(new Ui::MainWindow)
{
ui->setupUi(this);
//提供了用于存储自定义数据的通用模型
QStandardItemModel *model = new QStandardItemModel(5,4);
model->setHeaderData(0,Qt::Horizontal,tr("第一季度"));
model->setHeaderData(1,Qt::Horizontal,tr("第二季度"));
model->setHeaderData(2,Qt::Horizontal,tr("第三季度"));
model->setHeaderData(3,Qt::Horizontal,tr("第四季度"));
//循环插入数据
for(int row=0;row<5;row++)
{
model->insertRows(row,1); //插入一行
model->setData(model->index(row,0), qrand()%1000+1000); //插入第一列 插入一个1000-2000的随机数
model->setData(model->index(row,1), qrand()%1000+1000);
model->setData(model->index(row,2), qrand()%1000+1000);
model->setData(model->index(row,3), qrand()%1000+1000);
}
ui->tableView->horizontalHeader()->setVisible(true);//显示或隐藏表头
ui->tableView->verticalHeader()->setVisible(false);//显示或隐藏序列行
ui->tableView->setAutoScroll(true);//自动滚动条
//ui->tableView->resizeColumnsToContents(); //根据内容调整大小
ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);//根据容器调整大小
ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);//只读
ui->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); //设置选中模式为选中行
ui->tableView->setSelectionMode( QAbstractItemView::SingleSelection); //设置选中单行
ui->tableView->setModel(model); //使用
}
MainWindow::~MainWindow()
{
delete ui;
}