QTableWidget
最后更新于:2022-04-02 02:11:14
[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 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 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); //使用能拖能拽的模式
```
';