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

五、适用场景

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

西北风^_^

一毛一次,一次一毛

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值