Qt通用数据库翻页查询如何实现
发表于:2025-02-11 作者:千家信息网编辑
千家信息网最后更新 2025年02月11日,本篇内容介绍了"Qt通用数据库翻页查询如何实现"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!一、前言
千家信息网最后更新 2025年02月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安全错误
数据库的锁怎样保障安全
网络安全密匙忘记了怎么办
前端项目怎么发布到服务器
国民技术数据库
武汉软件开发培训哪里好
让软件开发做ui设计
如何管理多台串口服务器
codm服务器内部异常
互联网流量与科技人才
东城区大型软件开发特点
服务器三秒一滴
qt 数据库 查询
无线传感网络技术期末论文
戴尔t40服务器提示按f1
foxmail发信服务器
手机用魔兽世界怀旧数据库
工业软件开发行业风险审查
事业单位网络安全隐患排查不彻底
花生壳sql数据库
崇明区大规模软件开发厂家直销
棉花糖网络技术有限公司
北京亿家安互联网科技
深圳市网络安全信息化办公室
17年互联网科技
碧蓝航线 安卓 服务器
网络安全军民融合委员会
南京企业软件开发费用是多少
网络安全防病毒设备
花生壳sql数据库
智驾游网络技术有限公司
链接本地数据库c#如何打包