Qt通用数据库翻页查询如何实现
发表于:2024-11-23 作者:千家信息网编辑
千家信息网最后更新 2024年11月23日,本篇内容介绍了"Qt通用数据库翻页查询如何实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言
千家信息网最后更新 2024年11月23日Qt通用数据库翻页查询如何实现
本篇内容介绍了"Qt通用数据库翻页查询如何实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!
一、前言
在Qt与数据库结合编程的过程中,记录一多,基本上都需要用到翻页查看记录,翻页有个好处就是可以减轻显示数据的表格的压力,不需要一次性将数据库表的记录全部显示,也基本上没有谁在一页上需要一次性显示所有记录,搜索引擎搜索出来的结果也基本上都是翻页显示的,那么问题来了,有没有一种通用的办法可以只需要传入表名和查询条件自动翻页呢,答案是肯定的,Qt对数据库操作的封装也是相当完美的,显示也是如此,为此特意封装成了一个类,直接用就行。
主要功能:
自动按照设定的每页多少行数据分页
只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签
提供公共静态方法绑定字段数据到下拉框
建议条件字段用数字类型的主键,速度极快
增加线程查询符合条件的记录总数,数据量巨大时候不会卡主界面
提供查询结果返回信号,包括当前页/总页数/总记录数/查询用时
可设置所有列或者某一列对齐样式例如居中或者右对齐
可设置增加一列,列的位置,标题,宽度
可设置要查询的字段集合
二、代码思路
void DbPage::bindData(const QString &sql){ queryModel->setQuery(sql, QSqlDatabase::database(connName)); tableView->setModel(queryModel); //依次设置列标题列宽 int columnCount = tableView->model()->columnCount(); int nameCount = columnNames.count(); columnCount = columnCount > nameCount ? nameCount : columnCount; QListcolumnNames = this->columnNames; QList columnWidths = this->columnWidths; //根据设置添加新列,将对应新列的标题名称和宽度按照索引位置插 if (insertColumnIndex >= 0) { columnCount++; columnNames.insert(insertColumnIndex, insertColumnName); columnWidths.insert(insertColumnIndex, insertColumnWidth); queryModel->insertColumn(insertColumnIndex); } //设置列标题和列宽度 for (int i = 0; i < columnCount; i++) { queryModel->setHeaderData(i, Qt::Horizontal, columnNames.at(i)); tableView->setColumnWidth(i, columnWidths.at(i)); } if (labPageCurrent != 0) { labPageCurrent->setText(QString("第 %1 页").arg(pageCurrent)); } if (labPageCount != 0) { labPageCount->setText(QString("共 %1 页").arg(pageCount)); } if (labResultCount != 0) { labResultCount->setText(QString("共 %1 条").arg(resultCount)); } if (labResultCurrent != 0) { labResultCurrent->setText(QString("每页 %1 条").arg(resultCurrent)); } if (labInfo != 0) { labInfo->setText(QString("共 %1 条 每页 %2 条 共 %3 页 第 %4 页").arg(resultCount).arg(resultCurrent).arg(pageCount).arg(pageCurrent)); } //发送结果信号 emit receivePage(pageCurrent, pageCount, resultCount, resultCurrent);}void DbPage::slot_receiveCount(quint32 count, double msec){ if (labResult != 0) { labResult->setText(QString("查询用时 %1 秒").arg(QString::number(msec / 1000, 'f', 3))); } resultCount = count; int yushu = resultCount % resultCurrent; //不存在余数,说明是整行,例如300%5==0 if (yushu == 0) { if (resultCount > 0 && resultCount < resultCurrent) { pageCount = 1; } else { pageCount = resultCount / resultCurrent; } } else { pageCount = (resultCount / resultCurrent) + 1; } //2014-10-9增加翻页按钮可用不可用处理,如果只有一页数据,则翻页按钮不可用 if (pageCount <= 1) { btnFirst->setEnabled(false); btnLast->setEnabled(false); btnNext->setEnabled(false); btnPre->setEnabled(false); } else { btnFirst->setEnabled(true); btnLast->setEnabled(true); btnNext->setEnabled(true); btnPre->setEnabled(true); } tempSql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql); sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); //组织分页SQL语句 bindData(sql);}void DbPage::first(){ if (pageCount > 1) { startIndex = 0; pageCurrent = 1; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnLast->setEnabled(true); btnNext->setEnabled(true); } btnFirst->setEnabled(false); btnPre->setEnabled(false);}void DbPage::previous(){ if (pageCurrent > 1) { pageCurrent--; startIndex -= resultCurrent; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnLast->setEnabled(true); btnNext->setEnabled(true); } if (pageCurrent == 1) { btnFirst->setEnabled(false); btnPre->setEnabled(false); }}void DbPage::next(){ if (pageCurrent < pageCount) { pageCurrent++; startIndex += resultCurrent; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnFirst->setEnabled(true); btnPre->setEnabled(true); } if (pageCurrent == pageCount) { btnLast->setEnabled(false); btnNext->setEnabled(false); }}void DbPage::last(){ if (pageCount > 0) { startIndex = (pageCount - 1) * resultCurrent; pageCurrent = pageCount; sql = QString("%1 limit %2,%3;").arg(tempSql).arg(startIndex).arg(resultCurrent); bindData(sql); btnFirst->setEnabled(true); btnPre->setEnabled(true); } btnLast->setEnabled(false); btnNext->setEnabled(false);}
三、效果图
"Qt通用数据库翻页查询如何实现"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!
数据
查询
数据库
字段
标题
宽度
按钮
条件
结果
可设
一次性
位置
信号
内容
指示
更多
知识
过程
封装
搜索
数据库的安全要保护哪些东西
数据库安全各自的含义是什么
生产安全数据库录入
数据库的安全性及管理
数据库安全策略包含哪些
海淀数据库安全审计系统
建立农村房屋安全信息数据库
易用的数据库客户端支持安全管理
连接数据库失败ssl安全错误
数据库的锁怎样保障安全
云服务器图片显示不出来
中小企业网络安全现状分析
ssl 服务器压力测试
浪潮服务器最高温度
北京卫士通软件开发有限公司
海淀区加工软件开发特点
数据库审计策略
计算机网络技术学习前提
潍坊平台软件开发推荐
程序员软件开发证书
合肥中振网络技术有限公司
客户管理系统的数据库
公安部网络安全保卫局姜
c 通用数据库连接类
无线网络技术总结
收录数据库
数据库中游标什么时候用
5g移动通讯网络技术的优点
网络安全与信息化建设工作会
原型网站接入数据库
2021年6月网络安全
新型城镇化率表格数据库
数据库系统教程
部队关于手机网络安全的心得体会
DNA数据库匹配
数据库开发与设计工具
5g移动通讯网络技术的优点
棋牌网络技术推广有哪些
服务器默认启动方式
广东欧科空调数据库