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

【Qt开发】多元素类控件(二)-> QTableWidget - 实践

目录

1 -> 概述

2 -> QTableWidget 核心方法

3 -> QTableWidgetItem 核心信号

4 -> QTableWidgetItem 核心方法

5 -> 丰富多样的内置控件库

6 -> 核心优势与设计哲学

7 -> 代码示例

8 -> 总结


1 -> 概述

在图形用户界面开发中,表格是展示和编辑结构化数据最直观、最高效的组件之一。Qt 框架中的 QTableWidget 便是一个强大的表格控件,它极大地简化了表格数据的显示与交互。然而,它的真正威力并不仅仅在于展示文本和图标,而在于其能将各种复杂的界面控件无缝集成到每一个单元格中,从而将一个简单的表格转变为一个高度交互、功能丰富的动态数据管理界面。

传统的表格视图往往局限于显示静态的文本和数字。而 QTableWidget 通过其核心概念——单元格控件,彻底打破了这一局限。开发者可以将任何继承自 QWidget 的控件“置入”表格的单元格中,这使得每个单元格都可以成为一个独立的、功能完备的交互单元。

这种设计哲学将表格从纯粹的数据“显示器”升级为数据的“编辑器”和“控制器”。用户不再需要跳转到额外的对话框或窗口来修改数据,他们可以直接在表格内部完成所有操作,极大地提升了应用的流畅度和用户体验。

2 -> QTableWidget 核心方法

方法说明
item(int row, int column)根据行数列数获取指定的 QTableWidgetItem*
setItem(int row, int column, QTableWidget*)根据行数列数设置表格中的元素
currentItem()返回被选中的元素 QTableWidgetItem*
currentRow()返回被选中元素是第几行
currentColumn()返回被选中元素是第几列
row(QTableWidgetItem*)获取指定 item 是第几行
column(QTableWidgetItem*)获取指定 item 是第几列
rowCount()获取行数
columnCount()获取列数
insertRow(int row)在第 row 行处插入新行
insertColumn(int column)在第 column 列插入新列
removeRow(int row)删除第 row 行
removeColumn(int column)删除第 column 列
setHorizontalHeaderItem(int column, QTableWidget*)设置指定列的表头
setVerticalHeaderItem(int row, QTableWidget*)设置指定行的表头

3 -> QTableWidgetItem 核心信号

信号说明
cellClicked(int row, int column)点击单元格时触发
cellDoubleClicked(int row, int column)双击单元格时触发
cellEntered(int row, int column)鼠标进入单元格时触发
currentCellChanged(int row, int column, int previousRow, int previousColumn)选中不同单元格时触发

4 -> QTableWidgetItem 核心方法

方法说明
row()获取当前是第几行
column()获取当前是第几列
setText(const QString&)设置文本
setTextAlignment(int)设置文本对齐
setIcon(const QIcon&)设置图标
setSelected(bool)设置被选中
setSizeHints(const QSize&)设置尺寸
setFont(const QFont&)设置字体

5 -> 丰富多样的内置控件库

QTableWidget 能够轻松容纳 Qt 提供的几乎所有基础及高级控件,为不同的数据类型和交互需求提供了完美的解决方案:

  • 文本输入与验证:使用 QLineEdit 可以允许用户输入单行文本。更进一步,您可以为其设置输入验证器,例如只允许输入数字或符合特定格式的字符串,从而在源头保证数据的有效性。

  • 布尔值选择:对于“是/否”、“真/假”这类二元数据,QCheckBox 是最佳选择。其直观的勾选状态让数据的查看和修改一目了然。

  • 枚举与列表选择:当某个单元格的值需要从一个预定义的列表中选择时,QComboBox 便派上了用场。它通过下拉列表的形式,既节省了空间,又确保了输入值的准确性和一致性,非常适合用于“状态”、“类别”等字段。

  • 数字微调:对于数值型数据,QSpinBox 和 QDoubleSpinBox 提供了精确且安全的输入方式。用户可以通过上下按钮微调数值,同时控件本身可以限制数值的范围和步进,避免了无效输入。

  • 进度可视化:在需要展示任务进度、完成百分比或任何度量值时,QProgressBar 可以直观地将数字信息转化为视觉化的条形图,让用户一眼就能把握整体情况。

  • 自定义按钮与操作:您甚至可以在单元格中嵌入 QPushButton。点击这个按钮可以触发特定的业务逻辑,例如“删除此行”、“查看详情”、“执行计算”等,将操作与数据紧密地绑定在一起。

6 -> 核心优势与设计哲学

  1. 极致的用户体验:通过将编辑控件内嵌于数据旁,实现了“就地编辑”,最大限度地减少了用户的鼠标移动和焦点切换,使数据操作变得高效而自然。

  2. 界面紧凑与高效:将所有功能和数据整合在一个视图中,避免了因弹出过多窗口而导致的界面凌乱,保持了主界面的整洁和空间利用率。

  3. 灵活性与可定制性:由于可以自定义每个单元格的控件,您可以为同一表格中不同类型的数据列设计最合适的交互方式。这种灵活性使得 QTableWidget 能够适应从简单的配置表格到复杂的企业级数据管理系统的各种场景。

  4. 与数据模型的紧密结合:虽然 QTableWidget 是一个基于项的便捷类,但它底层依然与 Qt 的模型/视图架构相连。您可以直接从这些单元格控件中获取或设置数据,并轻松地将其同步到后台的数据结构或数据库中。

7 -> 代码示例

1. 在界面上创建 QTableWidget 和四个按钮,一个输入框

注意:QTableWidget 是 QTableView 的子类,功能比 QTableView 更丰富

2. 编写 widget.cpp 构造函数,构造表格中的初始数据

#include "widget.h"
#include "ui_widget.h"
Widget::Widget(QWidget *parent): QWidget(parent), ui(new Ui::Widget)
{ui->setupUi(this);// 新增行ui->tableWidget->insertRow(0);ui->tableWidget->insertRow(1);ui->tableWidget->insertRow(2);// 新增列ui->tableWidget->insertColumn(0);ui->tableWidget->insertColumn(1);ui->tableWidget->insertColumn(2);// 设置列名ui->tableWidget->setHorizontalHeaderItem(0, new QTableWidgetItem("班级"));ui->tableWidget->setHorizontalHeaderItem(1, new QTableWidgetItem("姓名"));ui->tableWidget->setHorizontalHeaderItem(2, new QTableWidgetItem("学号"));// 设置元素ui->tableWidget->setItem(0, 0, new QTableWidgetItem("计科2201"));ui->tableWidget->setItem(0, 1, new QTableWidgetItem("syh"));ui->tableWidget->setItem(0, 2, new QTableWidgetItem("22"));ui->tableWidget->setItem(1, 0, new QTableWidgetItem("计科2202"));ui->tableWidget->setItem(1, 1, new QTableWidgetItem("zzl"));ui->tableWidget->setItem(1, 2, new QTableWidgetItem("36"));ui->tableWidget->setItem(2, 0, new QTableWidgetItem("计科2202"));ui->tableWidget->setItem(2, 1, new QTableWidgetItem("yun"));ui->tableWidget->setItem(2, 2, new QTableWidgetItem("01"));
}
Widget::~Widget()
{delete ui;
}

3. 编写按钮的 slot 函数

void Widget::on_pushButton_insertRow_clicked()
{// 获取行数int rowCount = ui->tableWidget->rowCount();// 在最后一行之后新增行ui->tableWidget->insertRow(rowCount);
}
void Widget::on_pushButton_removeRow_clicked()
{// 获取到选中的行int curRow = ui->tableWidget->currentRow();// 删除选中行ui->tableWidget->removeRow(curRow);
}
void Widget::on_pushButton_insertColumn_clicked()
{// 获取列数int colCount = ui->tableWidget->columnCount();// 在最后一行之后新增行ui->tableWidget->insertColumn(colCount);// 设置列名const QString& text = ui->lineEdit->text();ui->tableWidget->setHorizontalHeaderItem(colCount, new QTableWidgetItem(text));
}
void Widget::on_pushButton_removeColumn_clicked()
{// 获取选中的列int curCol = ui->tableWidget->currentColumn();// 删除选中列ui->tableWidget->removeColumn(curCol);
}

4. 执行程序,即可完成表格的基本操作

8 -> 总结

Qt 的 QTableWidget 远不止是一个显示行列数据的简单网格。通过其强大的多元素控件支持,它成功地模糊了数据展示与数据编辑之间的界限,将一个静态的界面组件转化为一个充满活力的、应用程序与用户对话的核心舞台。当您需要在有限的空间内提供强大的数据交互能力时,充分利用 QTableWidget 的单元格控件特性,无疑是打造现代化、高效率桌面应用的一条捷径。


感谢各位大佬支持!!!

互三啦!!!

http://www.rkmt.cn/news/50513.html

相关文章:

  • 实用指南:从0开始了解kafka《第二篇 kafka的安装、管理和配置》
  • AMD Instinct MI50 通过llama.cpp 在 ROCm7.0.2上运行
  • 如何成为高级的安卓逆向工程师 glm4.6
  • PyTorch实战(9)——从零开始实现Transformer - 教程
  • 常用设计模式:职责链模式
  • 2025 最新推荐!汽车喇叭网生产厂家权威排行榜:0.01MM 精度 + 全工艺保障,靠谱品牌专业甄选
  • PlotNeutralNet使用教程
  • 2025雅思培训课程排行榜:高提分课程定制机构深度解析
  • 11.10-11.15 总结
  • 2025年芹黄素实力厂家权威推荐榜单:芹菜苷元/芹菜素/芹菜素95%源头厂家精选
  • 2025年遥控平板车厂家权威推荐榜单:平板运输车/顶升电动平车/电动地平车源头厂家精选
  • 2025 年 11 月空气电加热器,法兰电加热器,土壤修复电加热器厂家最新推荐,聚焦资质、案例、售后的七家企业深度解读
  • C# 中,依赖注入(DI)的实现方式 - 教程
  • mns 1115
  • 2025 年 11 月温州电商财税律师,温州执行律师,温州法律顾问律师最新推荐,聚焦资质、案例、售后的七家机构深度解读
  • P2966 [USACO09DEC] Cow Toll Paths G 题解
  • 【System Beats!】第八章 异常控制流
  • oracle 优化
  • 2025 年筛选机厂家推荐:深圳市恩艾斯科技有限公司,光学筛选机的专业缔造者与行业深耕者
  • 对拍程序
  • 反编译通用流程
  • 2025 年 11 月超细碳酸钙,重钙,碳酸钙厂家最新推荐,产能、专利、环保三维数据透视!
  • 从工具理性到价值共生:开源链动2+1模式、AI智能名片与S2B2C商城体系的社会连接重构研究
  • 2025 年 11 月山东实验室净化装修,山东实验室净化工程,山东实验室净化车间最新推荐,聚焦资质、案例、售后的五家机构深度解读!
  • 【洛谷】哈希表实战:5 道经典算法题(unordered_map/set 应用 + 避坑指南) - 详解
  • Redis 缓存一致性:从“数据不一致”根源到解决方案全梳理 - 详解
  • 2025年11月杭州驾照翻译、杭州病历翻译、杭州法律翻译品牌最新推荐,权威测评排名与选择指南!
  • 从《A Byte of Vim》中学习到的跳转方式gf
  • 发烧
  • 串口DMA接收与Modbus-CRC16校验