系列文章目录
文章目录
前言
-
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类提供了大量能使我们快速便捷地处理数据的函数和方法。