QTableView
头文件
#include "QStandardItemModel"
1. 准备数据模型 (Model)
最常用的是 QStandardItemModel,它足够应对大多数场景。
-
创建模型并设置表头:
QStandardItemModel* model = new QStandardItemModel(1, 2, this); // 设置水平表头(列标题) QStringList horizontalHeaders; horizontalHeaders << codec->toUnicode("姓名") << codec->toUnicode("性别") << codec->toUnicode("年龄"); model->setHorizontalHeaderLabels(horizontalHeaders); // 如果需要垂直表头(行标题) // QStringList verticalHeaders; // ... 设置行标题 // model->setVerticalHeaderLabels(verticalHeaders);
向模型填充数据:
// 为第0行第0列的单元格设置数据和文本 model->setItem(0, 0, new QStandardItem(codec->toUnicode("张三"))); model->setItem(0, 1, new QStandardItem(codec->toUnicode("男"))); model->setItem(0, 2, new QStandardItem(codec->toUnicode("22"))); // 为第1行第0列的单元格设置数据和文本 model->setItem(1, 0, new QStandardItem(codec->toUnicode("张三1"))); model->setItem(1, 1, new QStandardItem(codec->toUnicode("男1"))); model->setItem(1, 2, new QStandardItem(codec->toUnicode("221")));
2. 设置表格视图 (View)
模型准备好后,需要将其设置给 QTableView 并调整视图的显示和行为属性。
-
将模型设置给视图:这是最关键的一步
ui.tableView->setModel(model); // 假设你的tableView是通过ui文件拖拽的
// 设置选择行为:整行选择
// 设置选择行为:整行选择 ui.tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
// 设置选择模式:单行选择
// 设置选择模式:单行选择 ui.tableView->setSelectionMode(QAbstractItemView::SingleSelection);
// 设置表格不可编辑
// 设置表格不可编辑 ui.tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);
// 隐藏垂直表头(隐藏行号)
// 隐藏垂直表头(隐藏行号) ui.tableView->verticalHeader()->hide();
// 自动拉伸最后一列以填充剩余空间
// 自动拉伸最后一列以填充剩余空间 ui.tableView->horizontalHeader()->setStretchLastSection(true);
// 设置固定列宽
// 设置固定列宽 ui.tableView->setColumnWidth(0, 100);
// 根据内容自动调整列宽
// 根据内容自动调整列宽 ui.tableView->horizontalHeader()->setSectionResizeMode(QHeaderView::ResizeToContents);
// 设置行高
// 设置行高 ui.tableView->setRowHeight(0, 300);
//设置表头字体加粗
//设置表头字体加粗 QFont font = ui.tableView->horizontalHeader()->font(); font.setBold(true); ui.tableView->horizontalHeader()->setFont(font);
获取单元格内容:
QString name0 = model->data(model->index(0, 0)).toString();
int row, int column index中填入行列
核心要点与常见问题
- 设置顺序:务必先
setModel,再进行后续的视图属性设置(如列宽、选择模式等),否则设置可能不生效 - 性能考量:对于海量数据(如数万行),
QStandardItemModel可能会成为性能瓶颈。此时应考虑使用自定义模型,继承自QAbstractItemModel,并实现虚拟函数以实现按需加载数据 - 与 QTableWidget 的区别:Qt 还提供了一个
QTableWidget,它内部集成了模型,使用起来更简单,但在灵活性和处理大数据量时不如QTableView+ 自定义模型高效。

浙公网安备 33010602011771号