在QT5.14使用QTableView控件入门示例

8 篇文章 0 订阅
8 篇文章 0 订阅

简介

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;
}

运行截图

在这里插入图片描述

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值