当前位置: 首页 > news >正文

qt c++ QTableWidget

# 📋 QTableWidget 完整接口详解

QTableWidget 是 Qt 中用于显示和编辑表格数据的强大控件。以下是其所有接口的详细讲解:

## 1. 构造函数和基本设置

### 构造函数
```cpp
// 创建空表格
QTableWidget(QWidget *parent = nullptr);

// 创建指定行列数的表格
QTableWidget(int rows, int columns, QWidget *parent = nullptr);
```

### 基本设置方法
```cpp
// 设置行列数
void setRowCount(int rows);
void setColumnCount(int columns);
int rowCount() const;
int columnCount() const;

// 设置表格维度
void setDimensions(int rows, int columns);
```

## 2. 行列管理接口

### 行列操作
```cpp
// 插入行列
void insertRow(int row);
void insertColumn(int column);

// 删除行列
void removeRow(int row);
void removeColumn(int column);

// 获取行列索引
int row(const QTableWidgetItem *item) const;
int column(const QTableWidgetItem *item) const;
```

### 行列属性设置
```cpp
// 显示/隐藏行列
void setRowHidden(int row, bool hide);
void setColumnHidden(int column, bool hide);
bool isRowHidden(int row) const;
bool isColumnHidden(int column) const;

// 设置行列高度/宽度
void setRowHeight(int row, int height);
int rowHeight(int row) const;
void setColumnWidth(int column, int width);
int columnWidth(int column) const;

// 调整行列尺寸以适应内容
void resizeRowToContents(int row);
void resizeColumnToContents(int column);
void resizeRowsToContents();
void resizeColumnsToContents();
```

## 3. 单元格内容管理

### 单元格操作
```cpp
// 获取/设置单元格项目
QTableWidgetItem *item(int row, int column) const;
void setItem(int row, int column, QTableWidgetItem *item);

// 获取/设置当前单元格
QTableWidgetItem *currentItem() const;
void setCurrentItem(QTableWidgetItem *item);
void setCurrentCell(int row, int column);

// 获取当前单元格位置
int currentRow() const;
int currentColumn() const;

// 清除内容
void clear();
void clearContents();
```

### 特殊单元格操作
```cpp
// 获取指定位置的单元格项目
QTableWidgetItem *itemAt(int x, int y) const;
QTableWidgetItem *itemAt(const QPoint &point) const;

// 获取单元格的视觉矩形
QRect visualItemRect(const QTableWidgetItem *item) const;

// 获取指定坐标处的行列
int rowAt(int y) const;
int columnAt(int x) const;
```

## 4. 选择和编辑控制

### 选择模式设置
```cpp
// 设置选择行为
void setSelectionBehavior(QAbstractItemView::SelectionBehavior behavior);
QAbstractItemView::SelectionBehavior selectionBehavior() const;

// 设置选择模式
void setSelectionMode(QAbstractItemView::SelectionMode mode);
QAbstractItemView::SelectionMode selectionMode() const;
```

### 编辑控制
```cpp
// 设置编辑触发器
void setEditTriggers(QAbstractItemView::EditTriggers triggers);
QAbstractItemView::EditTriggers editTriggers() const;

// 打开单元格编辑器
void editItem(QTableWidgetItem *item);
void openPersistentEditor(QTableWidgetItem *item);
void closePersistentEditor(QTableWidgetItem *item);
```

## 5. 表头管理

### 水平表头操作
```cpp
// 获取水平表头
QHeaderView *horizontalHeader() const;

// 设置水平表头标签
void setHorizontalHeaderLabels(const QStringList &labels);
void setHorizontalHeaderItem(int column, QTableWidgetItem *item);

// 获取水平表头项目
QTableWidgetItem *horizontalHeaderItem(int column) const;
```

### 垂直表头操作
```cpp
// 获取垂直表头
QHeaderView *verticalHeader() const;

// 设置垂直表头标签
void setVerticalHeaderLabels(const QStringList &labels);
void setVerticalHeaderItem(int row, QTableWidgetItem *item);

// 获取垂直表头项目
QTableWidgetItem *verticalHeaderItem(int row) const;
```

## 6. 排序和搜索

### 排序功能
```cpp
// 启用/禁用排序
void setSortingEnabled(bool enable);
bool isSortingEnabled() const;

// 按列排序
void sortByColumn(int column, Qt::SortOrder order = Qt::AscendingOrder);

// 排序项目
virtual void sortItems(int column, Qt::SortOrder order = Qt::AscendingOrder);
```

### 搜索功能
```cpp
// 查找项目
QList<QTableWidgetItem*> findItems(const QString &text, 
Qt::MatchFlags flags) const;

// 滚动到指定项目
void scrollToItem(const QTableWidgetItem *item, 
QAbstractItemView::ScrollHint hint = EnsureVisible);
```

## 7. 视觉和外观控制

### 网格和边框
```cpp
// 显示/隐藏网格
void setShowGrid(bool show);
bool showGrid() const;

// 设置网格样式
void setGridStyle(Qt::PenStyle style);
Qt::PenStyle gridStyle() const;
```

### 交替行颜色
```cpp
// 设置交替行颜色
void setAlternatingRowColors(bool enable);
bool alternatingRowColors() const;
```

### 视觉选项
```cpp
// 设置文字换行
void setWordWrap(bool on);
bool wordWrap() const;

// 设置自动换行
void setTextElideMode(Qt::TextElideMode mode);
Qt::TextElideMode textElideMode() const;
```

## 8. 单元格控件管理

### 控件操作
```cpp
// 设置单元格控件
void setCellWidget(int row, int column, QWidget *widget);
QWidget *cellWidget(int row, int column) const;

// 移除单元格控件
void removeCellWidget(int row, int column);
```

### 索引转换
```cpp
// 从项目获取索引
QModelIndex indexFromItem(const QTableWidgetItem *item) const;
QTableWidgetItem *itemFromIndex(const QModelIndex &index) const;
```

## 9. 选择和范围操作

### 选择范围管理
```cpp
// 选择范围
void setRangeSelected(const QTableWidgetSelectionRange &range, bool select);
QList<QTableWidgetSelectionRange> selectedRanges() const;

// 选择项目
void setItemSelected(const QTableWidgetItem *item, bool select);
bool isItemSelected(const QTableWidgetItem *item) const;

// 选择单元格
void setCurrentCell(int row, int column);
void setCurrentCell(int row, int column, QItemSelectionModel::SelectionFlags command);
```

### 选中项获取
```cpp
// 获取选中的项目
QList<QTableWidgetItem*> selectedItems() const;

// 获取选中的行列
QList<int> selectedRows() const;
QList<int> selectedColumns() const;
```

## 10. 拖放操作

### 拖放设置
```cpp
// 设置拖放模式
void setDragDropMode(QAbstractItemView::DragDropMode behavior);
QAbstractItemView::DragDropMode dragDropMode() const;

// 设置拖放覆盖模式
void setDragDropOverwriteMode(bool overwrite);
bool dragDropOverwriteMode() const;

// 设置默认拖放动作
void setDefaultDropAction(Qt::DropAction dropAction);
Qt::DropAction defaultDropAction() const;
```

## 11. 信号接口

### 交互信号
```cpp
// 单元格点击信号
void cellClicked(int row, int column);
void cellDoubleClicked(int row, int column);
void cellPressed(int row, int column);
void cellActivated(int row, int column);

// 单元格改变信号
void cellChanged(int row, int column);
void currentCellChanged(int currentRow, int currentColumn, 
int previousRow, int previousColumn);

// 项目改变信号
void itemChanged(QTableWidgetItem *item);
void itemSelectionChanged();
void itemEntered(QTableWidgetItem *item);
```

### 编辑信号
```cpp
// 编辑相关信号
void itemActivated(QTableWidgetItem *item);
void itemPressed(QTableWidgetItem *item);
void itemClicked(QTableWidgetItem *item);
void itemDoubleClicked(QTableWidgetItem *item);
```

## 12. 高级功能接口

### 持久化编辑器
```cpp
// 持久化编辑器管理
bool isPersistentEditorOpen(QTableWidgetItem *item) const;
```

### 数据角色操作
```cpp
// 设置项目数据
virtual void setItemData(const QModelIndex &index, const QMap<int, QVariant> &roles);
virtual QMap<int, QVariant> itemData(const QModelIndex &index) const;
```

### 视觉提示
```cpp
// 设置悬停提示
void setToolTip(const QString &text);
void setStatusTip(const QString &text);
void setWhatsThis(const QString &text);
```

## 13. 性能优化接口

### 批量操作
```cpp
// 批量更新控制
void setUpdatesEnabled(bool enable);
bool updatesEnabled() const;

// 排序控制
void setSortingEnabled(bool enable);
```

### 视图更新
```cpp
// 视图更新控制
void update(const QModelIndex &index);
void updateGeometries();
void doItemsLayout();
```

## 14. 实用工具方法

### 坐标转换
```cpp
// 坐标转换方法
QPoint visualPos(const QPoint &pos) const;
QRect visualRect(const QModelIndex &index) const;
```

### 索引操作
```cpp
// 索引操作
QModelIndex moveCursor(QAbstractItemView::CursorAction cursorAction, 
Qt::KeyboardModifiers modifiers);
```

## 15. 完整示例代码

```cpp
#include <QApplication>
#include <QTableWidget>
#include <QTableWidgetItem>
#include <QHeaderView>
#include <QPushButton>
#include <QVBoxLayout>
#include <QWidget>
#include <QDebug>

int main(int argc, char *argv[])
{
QApplication app(argc, argv);

// 创建主窗口
QWidget window;
window.setWindowTitle("QTableWidget 完整示例");
window.resize(800, 600);

QVBoxLayout *layout = new QVBoxLayout(&window);

// 创建表格
QTableWidget *table = new QTableWidget(5, 4);

// 设置表头
QStringList headers;
headers << "ID" << "姓名" << "年龄" << "部门";
table->setHorizontalHeaderLabels(headers);

// 填充数据
for (int row = 0; row < table->rowCount(); ++row) {
for (int col = 0; col < table->columnCount(); ++col) {
QTableWidgetItem *item = new QTableWidgetItem();

switch (col) {
case 0:
item->setText(QString::number(row + 1));
item->setTextAlignment(Qt::AlignCenter);
break;
case 1:
item->setText(QString("用户%1").arg(row + 1));
break;
case 2:
item->setText(QString::number(20 + row));
item->setTextAlignment(Qt::AlignRight | Qt::AlignVCenter);
break;
case 3:
item->setText(row % 2 == 0 ? "技术部" : "市场部");
break;
}

table->setItem(row, col, item);
}
}

// 设置表格属性
table->setAlternatingRowColors(true);
table->setSortingEnabled(true);
table->horizontalHeader()->setSectionResizeMode(QHeaderView::Stretch);
table->setSelectionBehavior(QAbstractItemView::SelectRows);

// 连接信号
QObject::connect(table, &QTableWidget::cellClicked, [](int row, int col) {
qDebug() << "点击了单元格:" << row << "," << col;
});

QObject::connect(table, &QTableWidget::cellChanged, [](int row, int col) {
qDebug() << "单元格内容改变:" << row << "," << col;
});

layout->addWidget(table);
window.show();

return app.exec();
}
```

## 16. 重要注意事项

1. **性能考虑**:对于大数据集,考虑使用 QTableView + QAbstractTableModel
2. **内存管理**:QTableWidgetItem 需要手动管理内存
3. **信号处理**:注意 cellChanged 和 itemChanged 信号的区别
4. **线程安全**:UI 操作必须在主线程中进行

这个完整的接口列表涵盖了 QTableWidget 的所有功能,从基本的单元格操作到高级的拖放和排序功能。

http://www.dtcms.com/a/353515.html

相关文章:

  • Gopher URL协议与SSRF二三事
  • 帕累托优化:多目标决策的智慧与艺术
  • “下一代”图像模型——ComfyUI-Flux-Krea本地部署教程,体验划时代的图像质量
  • 计算机视觉(三):opencv环境搭建和图片显示
  • Optional 从 Java 8 到 21 的演进之路
  • 每日算法题【链表】:链表分割、链表的回文结构
  • 关于vscode的右键常用操作以及自定义快捷键
  • 密码管理中注释与重定向密码安全隐患及修复方案
  • 高并发内存池(12)-ThreadCache回收内存
  • Virtual PLCnext Controller 本地网络部署平台
  • Pandas DataFrame 列数操作完全指南
  • 高通平台蓝牙学习-- 基于WCN685x 的蓝牙低功耗(LE)功能
  • 浏览器与计算机网络
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘click’问题
  • k8s部署pgsql集群
  • 【Spring Cloud 微服务】5.架构的智慧枢纽:深度剖析 Nacos 注册中心
  • K8s持久化存储:PV与PVC
  • K8s 二次开发漫游录
  • 前端-npm和yarn的区别
  • 时序数据库的 LSM 树介绍
  • 计算机网络——DNS,ARP,RARP,DHCP,ICMP
  • 如何解决pip安装报错ModuleNotFoundError: No module named ‘websockets’问题
  • 时序数据库全景指南:从场景选型到内核拆解
  • Linux(十九)——CPU、I/O、网络与内核参数调优指南
  • 字库原理 GB2312-80
  • rk3588开发板最新kernel6.1下载(RK3588SDK源码下载)和环境搭建
  • 基于结构化码本的分层DNN框架用于高效语音增强
  • 第18章|变量:把数据装进“盒子”的正确方式
  • 【STM32】将 FreeRTOS移植到STM32F103RCT6 详细流程
  • 【开发配置】GitLab CR(Code Review)规则配置清单