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

Qt 中基于 QTableView + QSqlTableModel 的分页搜索与数据管理实现

Qt 中基于 QTableView + QSqlTableModel 的分页搜索与数据管理实现

一、组件说明

  • QTableView:一个基于模型的表格视图控件,支持排序、选择、委托自定义。
  • QSqlTableModel:与数据库表直接绑定的模型类,可用于展示和编辑数据库表数据,适合与 QTableView 配合使用。

二、主要功能

1. 分页显示数据

通过 SQL 的 LIMITOFFSET 控制当前页显示的数据数量与起始位置,结合当前页码和每页条数,动态更新 QSqlTableModel:

QString limitClause = QString("LIMIT %1 OFFSET %2").arg(pageSize).arg(currentPage * pageSize);
model->setFilter(...); // 可附加 WHERE 子句
model->select();
2. 搜索过滤

使用 model->setFilter(...) 实现字段模糊查询,例如:

QString term = searchEdit->text().trimmed();
QString filter = QString("name LIKE '%%1%'").arg(term);
model->setFilter(filter);
model->select();
3. 排序功能

启用视图的排序能力,用户可点击表头排序:

view->setSortingEnabled(true);
4. 添加数据

通过 QSqlQuery 插入记录:

QSqlQuery q;
q.prepare("INSERT INTO people (name, age) VALUES (?, ?)");
q.addBindValue("New User");
q.addBindValue(30);
q.exec();

插入后刷新模型:

model->select();
5. 导出为 CSV 文件

遍历模型中的数据,保存为 .csv 文件:

QFile file("export.csv");
QTextStream out(&file);
for (int row = 0; row < model->rowCount(); ++row) {QStringList rowContent;for (int col = 0; col < model->columnCount(); ++col)rowContent << model->data(model->index(row, col)).toString();out << rowContent.join(",") << "\n";
}

三、分页控制逻辑

  • 当前页:currentPage
  • 每页记录数:pageSize
  • 总记录数通过 SQL 查询统计:
QSqlQuery countQuery;
countQuery.exec("SELECT COUNT(*) FROM people WHERE ...");
int totalRows = countQuery.next() ? countQuery.value(0).toInt() : 0;
  • 计算总页数:
int totalPages = (totalRows + pageSize - 1) / pageSize;
  • 上一页 / 下一页按钮控制页码,并重新加载模型:
--currentPage; loadPage();
++currentPage; loadPage();

四、界面推荐布局

控件用途
QLineEdit输入搜索关键词
QPushButton搜索、分页切换等按钮
QLabel显示页码信息
QTableView显示数据表格
QVBoxLayout垂直布局整体界面
QHBoxLayout控制顶部搜索条和底部分页按钮

五、适用场景

  • 数据管理类桌面系统
  • 后台管理界面(如员工信息、客户数据、商品库存)
  • 本地数据库应用的可视化工具

相关文章:

  • 双向链表详解
  • 日语学习-日语知识点小记-构建基础-JLPT-N4阶段(14):かもしれません (~た・~ない)ほうがいいです
  • 兰亭妙微分享:B 端设计如何实现体验跃迁
  • 依赖倒置原则(DIP)
  • DeepSeek-R1模型蒸馏
  • Demo02_基于寄存器+标准库开发的项目
  • vulkanscenegraph显示倾斜模型(6.2)-记录与提交
  • LLMs Tokenizer Byte-Pair Encoding(BPE)
  • 上位机知识篇---粗细颗粒度
  • 【前端知识】Vue3状态组件Pinia详细介绍
  • MySQL:联合查询
  • 文章四《深度学习核心概念与框架入门》
  • 虚拟环境配置——Windows11 环境在VMware中部署 OpenStack
  • 一、Shell 脚本基础
  • 藏文文本自动分词工具学习实践
  • 免费抠图--在线网站、无需下载安装
  • DeepSeek实战--各版本对比
  • 在网鱼网吧测试文件试验成功
  • Java 入门:自定义标识符规则解析
  • 树状数组 + 线段树
  • 南京大屠杀幸存者刘贵祥去世,享年95岁
  • 科普|“小石头,大麻烦”,出现输尿管结石如何应对?
  • 安徽六安特色产品将“组团”入沪,借力五五购物节开拓市场
  • 央行就《关于规范供应链金融业务引导供应链信息服务机构更好服务中小企业融资有关事宜的通知》答问
  • 全国台联原会长杨国庆逝世,享年89岁
  • 中央宣传部、全国总工会联合发布2025年“最美职工”先进事迹