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 + 自定义模型高效。
posted @ 2025-11-25 18:32  家煜宝宝  阅读(19)  评论(0)    收藏  举报