Qt通用数据库翻页查询如何实现
发表于:2024-11-11 作者:千家信息网编辑
千家信息网最后更新 2024年11月11日,本篇内容介绍了"Qt通用数据库翻页查询如何实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言
千家信息网最后更新 2024年11月11日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安全错误
数据库的锁怎样保障安全
怎么开启自动连接服务器
学校网络安全教育标语
英特尔服务器管理网口
网络安全是个别部门的事情对错
山东联投网络技术公司怎么样
数据库和表
软件开发人员保密协议书
高校问卷调查系统数据库设计
济南租房网络安全
数据库统计功能
河南工控软件开发服务费
修改浏览器代理服务器
王者荣耀服务器差
360网络安全工程师认证
嘉兴营销网络技术推荐咨询
云服务器桌面图片
已经备案的域名换服务器
三级数据库技术学习
美国数据网络安全
微软xbox服务器 受限
北京点点网络技术有限公司
生存进化方舟怎么找国服服务器
无线热点网络技术
中和智慧互联网科技有限公司
网络安全的国产化
深圳市DMR对讲机软件开发公司
软件开发者是如何盈利的
计算机网络技术毕业证
网络技术工程师证书是什么样的
河北pdu服务器电源哪家强