1、概述
QTableView 是 Qt 框架中的一个高级视图类,用于以表格形式展示二维数据。它基于 QAbstractItemView,并与模型(通常是 QAbstractTableModel 或 QStandardItemModel)结合使用,以实现数据的展示和交互。QTableView 提供了灵活的列宽调整、行高设置、单元格编辑以及数据排序和筛选等功能。它支持多种选择模式,如单选、多选和扩展选择,以及通过委托(delegates)来自定义单元格的渲染和编辑行为。
2、重要方法
QTableView 提供了丰富的 API 来管理和展示数据,以下是一些重要的方法:
- setModel:设置数据模型,将数据模型与视图关联起来。
- selectionModel 和 setSelectionModel:获取和设置选择模型,用于管理用户的选择。
- horizontalHeader 和 verticalHeader:获取表格的水平和垂直表头,用于自定义表头的外观和行为。
- resizeColumnsToContents 和 resizeRowsToContents:根据内容自动调整列宽和行高。
- setSortingEnabled:启用或禁用排序功能。
- setEditTriggers:设置编辑触发器,决定何时可以编辑单元格。
- setCurrentIndex 和 currentIndex:设置和获取当前选中的单元格。
- setSpan:设置单元格的跨行和跨列数。
3、重要信号
QTableView 发射多种信号来响应用户的操作和数据的变更,以下是一些重要的信号:
- clicked:单击某个单元格时发射此信号。
- doubleClicked:双击某个单元格时发射此信号。
- pressed:按下鼠标按钮时发射此信号。
- released:释放鼠标按钮时发射此信号。
- selectionChanged:选择发生变化时发射此信号。
- currentChanged:当前单元格发生变化时发射此信号。
- cellClicked、cellDoubleClicked、cellPressed、cellReleased:这些信号提供了更细粒度的控制,允许开发者根据单元格的位置和索引来响应事件。
MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent)
{setWindowTitle("QTableView Example");resize(600, 400);// 创建数据模型QStandardItemModel *model = new QStandardItemModel;model->setHorizontalHeaderLabels({"Name", "Age", "Occupation"});QList<QStandardItem *> row1;row1 << new QStandardItem("Alice") << new QStandardItem("30") << new QStandardItem("Engineer");model->appendRow(row1);QList<QStandardItem *> row2;row2 << new QStandardItem("Bob") << new QStandardItem("25") << new QStandardItem("Designer");model->appendRow(row2);QList<QStandardItem *> row3;row3 << new QStandardItem("Charlie") << new QStandardItem("35") << new QStandardItem("Manager");model->appendRow(row3);QList<QStandardItem *> row4;row4 << new QStandardItem("David") << new QStandardItem("40") << new QStandardItem("Director");model->appendRow(row4);// 创建表视图QTableView *tableView = new QTableView;tableView->setModel(model);tableView->resizeColumnsToContents(); // 自动调整列宽tableView->setSelectionMode(QAbstractItemView::SingleSelection); // 设置选择模式为单选tableView->setSortingEnabled(true); // 启用排序功能tableView->setShowGrid(true); // 显示网格线// 布局管理QVBoxLayout *layout = new QVBoxLayout;layout->addWidget(tableView);QWidget *centralWidget = new QWidget;centralWidget->setLayout(layout);setCentralWidget(centralWidget);
}
觉得有帮助的话,打赏一下呗。。