【Qt之·类QTableView】

系列文章目录



前言

  • QTableView类是Qt提供的用于显示表格数据的控件,继承自QAbstractItemView类。它提供了灵活的数据显示和编辑功能,还可以与QAbstractTableModel类或其子类一起使用,实现自定义数据模型。

  • QTableView类可以显示横向和纵向的表头,支持用户拖拽和调整列宽、行高、列顺序和排序等操作。还可以将数据分组(通过指定行或列),并为每个组设置标题,以便更好地组织和展示数据。

  • QTableView类还提供了多种视图模式(如表格模式、列表模式、图标模式等),可以根据需要自由切换。同时,它也支持单元格选择、多行多列选择和复制粘贴等操作。

  总之,QTableView类是Qt中非常重要的一个控件,可以非常方便地用于显示表格数据和进行数据的编辑和操作。,本文就介绍了机器学习的基础内容。


一、常用属性设置

列宽等间距

ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 平分
ui->tableView->verticalHeader()->setDefaultSectionSize(30); //所有列的默认行高
ui->tableView->horizontalHeader()->setStretchLastSection(true); //将最后一列填充满表格

1.设置表格的表头

/* 设置垂直表格头的显示、对齐方式、高宽等,水平表格头类似 */
this->horizontalHeader()->setVisible(false); // 隐藏水平表头
ui->tableView->verticalHeader()->hide(); //隐藏垂直表头
this->horizontalHeader()->setDefaultAlignment(Qt::AlignLeft);  // 设置水平表头为左对齐
this->verticalHeader()->setDefaultAlignment(Qt::AlignBottom); // 设置垂直表头为底对齐
this->verticalHeader()->setSectionResizeMode(QHeaderView::Fixed); // 固定表格宽度不可扩展,不可手动调整宽度
this->verticalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents); // 表格宽度随内容自动扩展
this->verticalHeader()->setSectionResizeMode(QHeaderView::Stretch); // 表格宽度自动根据UI进行计算,不可手动调整宽度
this->verticalHeader()->setMinimumSectionSize(ITEM_HEIGHT);
this->verticalHeader()->setDefaultSectionSize(ITEM_HEIGHT);

2.设置表格的线属性

this->setShowGrid(false); // 隐藏网格线
this->setGridStyle(Qt::DotLine); // 线的样式
this->setFocusPolicy(Qt::NoFocus); // 取消Item选中后的虚线边框

3.设置表格的选中模式等

this->setWordWrap(false); // 文本过长不换行
this->setEditTriggers(QAbstractItemView::NoEditTriggers); // 设置不可编辑
this->setSelectionMode(QAbstractItemView::NoSelection); // 设置不可被选中
this->setSelectionBehavior(QAbstractItemView::SelectRows); // 设置选中一整行
this->setSelectionMode (QAbstractItemView::SingleSelection); // 只允许选中单行
//this->setSelectionMode (QAbstractItemView::ExtendedSelection); // 允许选中多行

4.设置表格的内置滚动条

this->setVerticalScrollBarPolicy(Qt::ScrollBarAsNeeded); // 显示垂直滑动条
this->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); // 隐藏水平滑动条
this->setVerticalScrollMode(QTableView::ScrollPerPixel); // 垂直滚动条设置为像素滚动
this->verticalScrollBar()->setSingleStep(ITEM_HEIGHT/3); // 设置滚动条步长(要先设置为像素滚动,才能生效;ITEM_HEIGHT为项的高度)

5.其它

model->item(0,0)->setTextAlignment(Qt::AlignCenter); //设置模型文本对齐方式
model->item(0,0)->setForeground(Qt::red); //设置字体颜色

6.其它

this->verticalHeader()->setHidden(true); // 隐藏默认行号
this->setIconSize(QSize(30, 30)); // 设置icon尺寸大小(否则显示的图标尺寸很小,即使实际图片文件很大)
this->setDragEnabled(false); // 禁用拖拽,否则此处添加拖拽的话会生成两个item
this->setMouseTracking(true); // 设置鼠标追踪,下面的entered才会触发槽函数

二、给QStandardItemModel设置数据

  通过调试QStandardItemModel.cpp的源码可知,setItem()在设置每一个item时都需要进行new QStandardItem的构造,当这个数据量是几万行时会构造数十万次QStandardItem,而setData()则是直接为指定的indexd对应的item设置值,省去了构造,前提是设置了rowCount()和columnCount(),否则setData()是无效的。

1.setData()

model->setRowCount(10);
model->setColumnCount(10);
model->setData(table_model->index(i, j), "USB_DISK", Qt::DisplayRole);

1.setItem()

QStandardItem *item = new QStandardItem("USB_DISK);
table_model->setItem(row, column, item);

三、用法示例

示例1

QStandardItemModel* model = new QStandardItemModel();
    ui->tableView->setModel(model);
    ui->tableView->setFocusPolicy(Qt::NoFocus); //去掉选中单元格时的虚框
    ui->tableView->horizontalHeader()->hide();
    model->setHorizontalHeaderLabels({"", ""});
//    ui->tableView->verticalHeader()->setHidden(true);

    ui->tableView->verticalHeader()->setDefaultSectionSize(100);
    ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    model->setItem(0, 0, new QStandardItem("伺服从站类型"));

    QComboBox* cmb = new QComboBox();
    cmb->addItems({"通用", "英威腾", "摩通", "禾川", "松下", "高创", "台达", "雷赛", "清能德创"});
    ui->tableView->setIndexWidget(model->index(0, 1), cmb);

    model->setItem(1, 0, new QStandardItem("伺服从站类型"));

    cmb = new QComboBox();
    cmb->addItems({"通用", "英威腾", "摩通", "禾川", "松下", "高创", "台达", "雷赛", "清能德创"});
    ui->tableView->setIndexWidget(model->index(1, 1), cmb);

    ui->tableView->setCurrentIndex(ui->tableView->model()->index(0,3));

示例2

 ui->tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);

    QStandardItemModel *model = new QStandardItemModel;
    model->setColumnCount(1);
    model->setRowCount(1);

    ui->tableView->setModel(model);

    model->setHorizontalHeaderLabels({"外部设备"});
//    model->setVerticalHeaderLabels({"1"});

//    model->setItem(0,0,new QStandardItem("USB_DISK"));
    model->setData(model->index(0,0),"USB_DISK",Qt::DisplayRole);
    model->item(0,0)->setTextAlignment(Qt::AlignCenter); //设置模型文本对齐方式
    model->item(0,0)->setForeground(Qt::red); //设置字体颜色
    on_tableView_clicked(model->index(0,0)); //通过槽函数调用实现点击效果

总结

以上就是QTableView的内容,本文仅仅简单介绍了 的使用,而QTableView类提供了大量能使我们快速便捷地处理数据的函数和方法。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值