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

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控制顶部搜索条和底部分页按钮

五、适用场景

  • 数据管理类桌面系统
  • 后台管理界面(如员工信息、客户数据、商品库存)
  • 本地数据库应用的可视化工具
http://www.xdnf.cn/news/3484.html

相关文章:

  • 仙盟创梦IDE-智能编程,编程自动备份+编程审计
  • AI 驱动的智能交通系统:从拥堵到流畅的未来出行
  • uc系统中常用命令、标准C库函数和系统调用
  • 从实列中学习linux shell9 如何确认 服务器反应迟钝是因为cpu还是 硬盘io 到底是那个程序引起的。cpu负载多高算高
  • yolov5 本地训练
  • 从读写分离到分布式服务:系统架构演进十阶段深度解析
  • 实验二 软件白盒测试
  • 对第三方软件开展安全测评,如何保障其安全使用?
  • 【项目设计】MySQL 连接池的设计
  • BN254 点压缩在 L2 中的应用
  • 纳米AI搜索体验:MCP工具的实际应用测试,撰写报告 / 爬虫小红书效果惊艳2
  • python数据分析(八):Pandas 文本数据处理
  • 邹晓辉教授十余年前关于围棋程序与融智学的思考,体现了对复杂系统本质的深刻洞察,其观点在人工智能发展历程中具有前瞻性意义。我们可以从以下三个维度进行深入解析:
  • MYSQL-设计表
  • Redis 主从复制部署
  • MIT XV6 - 1.2 Lab: Xv6 and Unix utilities - pingpong
  • 基于DQN的自动驾驶小车绕圈任务
  • OSPF路由协议配置
  • 数字智慧方案5867丨智慧建造(BIM技术智慧工地)在施工阶段的实践与应用方案(90页PPT)(文末有下载方式)
  • 手写 Vue 源码 === Vue3 设计思想
  • 吴恩达深度学习作业 RNN模型——字母级语言模型
  • Dubbo(90)如何设计一个支持多协议的Dubbo服务?
  • Java 编译后的字节码文件扩展名
  • 三类思维坐标空间与时空序位信息处理架构
  • EMC PowerStore存储学习之一NVMe磁盘的命名规则
  • 【CVE-2025-1094】:PostgreSQL 14.15 SQL注入漏洞导致的RCE_ 利用代码和分析
  • React 语法扩展
  • 数字智慧方案5875丨智慧交通枢纽综合解决方案(43页PPT)(文末有下载方式)
  • 数据结构学习笔记
  • 4.5 使用busybox制作根文件系统