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

Windows图形界面(GUI)-QT-C/C++ - Qt Table Widget详解教程

  • 公开视频 -> 链接点击跳转公开课程
  • 博客首页 -> ​​​链接点击跳转博客主页

目录

QTableWidget基础概念

使用场景

常见样式

QTableWidget属性设置

一般属性(General)

选择属性(Selection)

滚动与拖拽属性(Drag)

编辑属性(Editing)

外观属性(Appearance)

表头属性(Headers)

QTableWidget常见操作

创建和设置项

设置行数和列数

设置表头标签

访问和操作单元格

设置单元格项

获取单元格项

移除单元格项

清除所有表格项和标题

修改单元格属性

设置自定义控件

获取自定义控件

设置列宽和行高

选择和操作

选中指定行和列

清除所有选中的项

获取和设置当前选中项

信号处理

项被点击

项被双击

项内容改变

单元格被点击

单元格被双击

排序和查找

启用排序功能

对项进行排序

查找项

QTableWidget示例代码

完整示例


QTableWidget基础概念

QTableWidget 是 Qt 提供的一个功能强大的表格控件,适用于显示和管理二维数据。它内置了一个标准的模型(QTableWidgetItem),使得数据的添加、删除和管理变得更加简单。

使用场景

  • 显示和管理二维数据,如电子表格、任务列表等。
  • 需要多列、多行显示数据时。
  • 需要对数据进行排序、选择和编辑时。

常见样式

  1. 带表头的表格:显示表格的同时显示表头。
  2. 隐藏表头的表格:隐藏表头,只显示表格内容。
  3. 交替行颜色的表格:行背景颜色交替显示,提升可读性。

QTableWidget属性设置

一般属性(General)

  • columnCount:定义表格的列数。
  • rowCount:定义表格的行数。
  • showGrid:控制是否显示表格的网格线。
  • gridStyle:设置网格线的样式,例如实线、点线等。
  • sortingEnabled:控制是否允许用户通过点击列标题来对数据进行排序。

选择属性(Selection)

  • selectionBehavior:设置选择行为,可以是选择行、列或单个项目。
  • selectionMode:定义选择模式,例如单选、多选等。

滚动与拖拽属性(Drag)

  • dragDropMode:设置拖放模式,例如仅拖动、仅放置或两者都启用。

编辑属性(Editing)

  • editTriggers:设置触发编辑的事件,例如单击、双击等。
  • tabKeyNavigation:控制是否允许使用 Tab 键在单元格间导航。

外观属性(Appearance)

  • alternatingRowColors:设置是否启用交替行颜色,以提高可读性。
  • iconSize:设置表格中显示的图标大小。
  • wordWrap:控制是否在单元格中自动换行。

表头属性(Headers)

  • horizontalHeaderLabels 和 verticalHeaderLabels:通过逗号分隔的字符串列表设置水平和垂直表头的标签。

QTableWidget常见操作

创建和设置项

设置行数和列数
ui->tableWidget->setRowCount(5);  
ui->tableWidget->setColumnCount(3);

设置表头标签
ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "Name" << "Age" << "Occupation");  
ui->tableWidget->setVerticalHeaderLabels(QStringList() << "Row 1" << "Row 2" << "Row 3" << "Row 4" << "Row 5");

访问和操作单元格

设置单元格项
QTableWidgetItem *item = new QTableWidgetItem("John Doe");  
ui->tableWidget->setItem(0, 0, item);
获取单元格项
void MainWindow::on_pushButton_clicked()
{
    QTableWidgetItem *item = ui->tableWidget->item(0, 0);
    QString text = item->text();
    qDebug() << text;
}
移除单元格项
QTableWidgetItem *item = ui->tableWidget->takeItem(0, 0);  
delete item;
清除所有表格项和标题
ui->tableWidget->clear();

修改单元格属性

设置自定义控件
QPushButton *button = new QPushButton("Click Me");  
ui->tableWidget->setCellWidget(0, 1, button);  
获取自定义控件
QWidget *widget = ui->tableWidget->cellWidget(0, 1);
设置列宽和行高
ui->tableWidget->setColumnWidth(0, 150);  
ui->tableWidget->setRowHeight(0, 50);

选择和操作

选中指定行和列
ui->tableWidget->selectRow(1);  
ui->tableWidget->selectColumn(2);
获取和设置当前选中项
QTableWidgetItem *currentItem = ui->tableWidget->currentItem();  
ui->tableWidget->setCurrentItem(currentItem);

信号处理

项被点击
connect(ui->tableWidget, &QTableWidget::itemClicked, this, [](QTableWidgetItem *item) {  
    qDebug() << "Item clicked:" << item->text();  
});
项被双击
connect(ui->tableWidget, &QTableWidget::itemDoubleClicked, this, [](QTableWidgetItem *item) {  
    qDebug() << "Item double clicked:" << item->text();  
});
项内容改变
connect(ui->tableWidget, &QTableWidget::itemChanged, this, [](QTableWidgetItem *item) {  
    qDebug() << "Item changed:" << item->text();  
});
单元格被点击
connect(ui->tableWidget, &QTableWidget::cellClicked, this, [](int row, int column) {  
    qDebug() << "Cell clicked at row:" << row << "column:" << column;  
});
单元格被双击
connect(ui->tableWidget, &QTableWidget::cellDoubleClicked, this, [](int row, int column) {  
    qDebug() << "Cell double clicked at row:" << row << "column:" << column;  
});

排序和查找

启用排序功能
ui->tableWidget->setSortingEnabled(true);
对项进行排序
ui->tableWidget->sortItems(0, Qt::AscendingOrder);  // 按第一列升序排序
查找项
QList<QTableWidgetItem*> foundItems = ui->tableWidget->findItems("John", Qt::MatchContains);  
for (QTableWidgetItem *item : foundItems) {  
    qDebug() << "Found item:" << item->text();  
}

QTableWidget示例代码

完整示例

    ui->tableWidget->setColumnCount(2);
    ui->tableWidget->setHorizontalHeaderLabels(QStringList() << "进程名称"<< "进程标识");

void MainWindow::on_pushButton_28_clicked()
{
    int rowCount = ui->tableWidget->rowCount();
    ui->tableWidget->insertRow(rowCount);
    ui->tableWidget->setItem(rowCount, 0, new QTableWidgetItem("notepad"));
    ui->tableWidget->setItem(rowCount, 1, new QTableWidgetItem("1024"));
}

void MainWindow::on_pushButton_30_clicked()
{
    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems();
    for (int var = 0; var < items.count(); ++var) {
        ui->tableWidget->removeRow(items[var]->row());
    }

}

void MainWindow::on_pushButton_31_clicked()
{
    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems();
    for (int var = 0; var < items.count(); ++var) {
        ui->tableWidget->takeItem(items[var]->row(), items[var]->column());
    }
}

void MainWindow::on_pushButton_29_clicked()
{
    QList<QTableWidgetItem*> items = ui->tableWidget->selectedItems();
    for (int var = 0; var < items.count(); ++var) {
        items[var]->setText("456");
    }
}


http://www.kler.cn/a/509002.html

相关文章:

  • 【深度学习】Pytorch:在 ResNet 中加入注意力机制
  • 架构思考与实践:从通用到场景的转变
  • AI的出现,是否能替代IT从业者?
  • 如何使用Python将长图片分隔为若干张小图片
  • 数仓建模(五)选择数仓技术栈:Hive ClickHouse 其它
  • 函数(函数的概念、库函数、自定义函数、形参和实参、return语句、数组做函数参数、嵌套调用和链式访问、函数的声明和定义、static和extern)
  • Java中GUI编程和内部类的学习
  • 【SQL 中的分组查询与联合查询详解】
  • 面试经验分享-回忆版某小公司
  • Spring经典面试题
  • unfold函数
  • 什么是长连接?Netty如何设置进行长连接?
  • Docker详解与部署微服务实战
  • Ansible深度解析:如何精准区分并选用command与shell模块
  • Ruby语言的数据库交互
  • Redis 设计与实现:深入理解高性能缓存数据库
  • 【逆境中绽放:万字回顾2024我在挑战中突破自我】
  • 数据结构——堆(介绍,堆的基本操作、堆排序)
  • 【MySQL】简单解析一条SQL更新语句的执行过程
  • Zookeeper 配置文件:核心参数优化与实操指南