ThinkChat🤖让你学习和工作更高效,注册即送10W Token,即刻开启你的AI之旅 广告
[TOC] ## 概述 常用函数 ``` QTableWidget(QWidget * parent = 0) QTableWidget(int rows, int columns, QWidget * parent = 0) // 行列 void setRowCount(int rows) //设置行数 void setColumnCount(int columns) //设置列数 int rowCount() const //获取行数 int columnCount() const //获取列数 //设置条目 void QTableWidget::​setItem(int row, int column, QTableWidgetItem * item) //移除条目 QTableWidgetItem * QTableWidget::​takeItem(int row, int column) // 条目访问函数 QTableWidgetItem * QTableWidget::​item(int row, int column) const QTableWidgetItem * QTableWidget::​itemAt(const QPoint & point) const QTableWidgetItem * QTableWidget::​itemAt(int ax, int ay) const //当前选中条目的操作 QTableWidgetItem * QTableWidget::​currentItem() const int QTableWidget::​currentRow() const //当前选中行号 int QTableWidget::​currentColumn() const //当前选中列号 // 点亮单元格 void QTableWidget::​setCurrentCell(int row, int column) void QTableWidget::​setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command) // 条目查找 QList<QTableWidgetItem *> QTableWidget::​findItems(const QString & text, Qt::MatchFlags flags) const // 排序 void setSortingEnabled(bool enable) //设置是否自动排序 bool isSortingEnabled() const //判断是否开启了自动排序 void QTableView::​sortByColumn(int column, Qt::SortOrder order) // 按哪一行排序 // 单元格控件 void QTableWidget::​setCellWidget(int row, int column, QWidget * widget) // 设置独立的单元格控件 QWidget * QTableWidget::​cellWidget(int row, int column) const // 获取单元格控件 void QTableWidget::​removeCellWidget(int row, int column) //移除单元格空间,删除单元格控件后,单元格就会显示原来的条目内容 //编辑 void QTableWidget::​openPersistentEditor(QTableWidgetItem * item) //开启持续编辑器 void QTableWidget::​closePersistentEditor(QTableWidgetItem * item) //关闭持续编辑器 void QTableWidget::​editItem(QTableWidgetItem * item) // 编辑触发器 void setEditTriggers(EditTriggers triggers) //设置编辑触发器 EditTriggers editTriggers() const //获取编辑触发器 // 信号 void currentCellChanged(int currentRow, int currentColumn, int previousRow, int previousColumn) //单元格无论是否为空都起作用,当前选中单元格的变化信号,参数指出了新当前单元格行列号和旧单元格的行列号 void currentItemChanged(QTableWidgetItem * current, QTableWidgetItem * previous) //当前选中条目变化信号,新、旧当前选中单元格至少有一个非空才会触发这个信号 void cellActivated(int row, int column) //单元格被激活 void cellChanged(int row, int column) //单元格内部发生变化,如从NULL变成有条目,或者条目内部数据发生变化 void cellClicked(int row, int column) //单元格被点击 void cellDoubleClicked(int row, int column) //单元格被双击 // 选择区域 QList<QTableWidgetItem *> QTableWidget::​selectedItems() const ``` ### 表头设置 QTableWidgetItem 既可以作为表格控件普通单元格的条目,也可以用来设置表头分段 常用函数 ``` void QTableWidget::​setHorizontalHeaderLabels(const QStringList & labels) //设置水平表头文本 void QTableWidget::​setVerticalHeaderLabels(const QStringList & labels) //设置垂直表头文本 void QTableWidget::​setHorizontalHeaderItem(int column, QTableWidgetItem * item) //设置指定列的水平表头分段条目 QTableWidgetItem * QTableWidget::​horizontalHeaderItem(int column) const //获取指定列的水平表头分段条目 void QTableWidget::​setVerticalHeaderItem(int row, QTableWidgetItem * item) //设置指定行的垂直表头分段条目 QTableWidgetItem * QTableWidget::​verticalHeaderItem(int row) const //获取指定行的垂直表头分段条目 QHeaderView * QTableView::​horizontalHeader() const //获取整个的水平表头 void QTableView::​setHorizontalHeader(QHeaderView * header) //设置整个的水平表头 QHeaderView * QTableView::​verticalHeader() const //获取整个的垂直表头 void QTableView::​setVerticalHeader(QHeaderView * header) //设置整个的垂直表头 ``` ### 设计师界面 1. 设置 "horizontalHeaderShowSortIndicator" 时,根据一个列自动排序时,该列水平表头分段显示三角形排序指示符 ![](https://qtguide.ustclug.org/images/ch08/ch08-02-03.png) 2. 设置 "horizontalHeaderStretchLastSection ",表格最后一列会自动占据剩下的空间 ## 实例 ``` ui->tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows); //为方便删除按钮操作,把选中模式设为单选,即每次只选中一行,而不能选中多行 ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); //开启自动排序 ui->tableWidget->setSortingEnabled(true); ui->tableWidget->sortByColumn(0, Qt::AscendingOrder); //设置末尾一列自动拉伸 ui->tableWidget->horizontalHeader()->setStretchLastSection(true); //设置默认行高,把图标设置更大一些 ui->tableWidget->verticalHeader()->setDefaultSectionSize(36); ui->tableWidget->setIconSize( QSize(32,32) ); //构造表格条目 for(int i=0; i<3; i++) { for(int j=0; j<3; j++) { QTableWidgetItem *itemTA = new QTableWidgetItem(); itemTA->setText( tr("tableItem %1, %2").arg(i).arg(j) ); ui->tableWidget->setItem( i, j, itemTA ); } } // 设置内部拖拽 ui->tableWidget->setDragDropMode(QAbstractItemView::InternalMove); // 外部拖拽 ui->tableWidget->setSelectionMode(QAbstractItemView::SingleSelection); //单选模式 ui->tableWidget->setDragEnabled(true); //可以拖出源条目 ui->tableWidget->viewport()->setAcceptDrops(true); //视口可以接收拖入 ui->tableWidget->setDropIndicatorShown(true); //启用拖拽的显示效果 ui->tableWidget->setDragDropMode(QAbstractItemView::DragDrop); //使用能拖能拽的模式 ```