《QT实用小工具·八》数据库通用翻页类

1、概述
源码放在文章末尾

该项目实现数据库通用翻页类,主要包含如下功能:
1:自动按照设定的每页多少行数据分页
2:只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签
3:提供公共静态方法绑定字段数据到下拉框
4:建议条件字段用数字类型的主键,速度极快
5:增加线程查询符合条件的记录总数,数据量巨大时候不会卡主界面
6:提供查询结果返回信号,包括当前页/总页数/总记录数/查询用时
7:可设置所有列或者某一列对齐样式例如居中或者右对齐
8:可设置增加一列,列的位置,标题,宽度
9:可设置要查询的字段集合

下面是demo演示:
在这里插入图片描述

项目部分代码如下所示:

#ifndef DBPAGE_H
#define DBPAGE_H/*** 数据库通用翻页类* 1:自动按照设定的每页多少行数据分页* 2:只需要传入表名/字段集合/每页行数/翻页指示按钮/文字指示标签* 3:提供公共静态方法绑定字段数据到下拉框* 4:建议条件字段用数字类型的主键,速度极快* 5:增加线程查询符合条件的记录总数,数据量巨大时候不会卡主界面* 6:提供查询结果返回信号,包括当前页/总页数/总记录数/查询用时* 7:可设置所有列或者某一列对齐样式例如居中或者右对齐* 8:可设置增加一列,列的位置,标题,宽度* 9:可设置要查询的字段集合*/#include <QtGui>
#include <QtSql>
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
#include <QtWidgets>
#endif//自定义模型设置列居中和右对齐
class SqlQueryModel: public QSqlQueryModel
{
public:explicit SqlQueryModel(QObject *parent = 0);protected:QVariant data(const QModelIndex &index, int role) const;private:bool allCenter;                 //所有居中QList<int> alignCenterColumn;   //居中对齐列QList<int> alignRightColumn;    //右对齐列public://设置所有列居中void setAllCenter(bool allCenter);//设置居中对齐列索引集合void setAlignCenterColumn(const QList<int> &alignCenterColumn);//设置右对齐列索引集合void setAlignRightColumn(const QList<int> &alignRightColumn);
};//计算复合条件的记录总行数,以便分页
class DbCountThread : public QThread
{Q_OBJECT
public:explicit DbCountThread(QObject *parent = 0);private:QString connName;   //数据库连接名称QString sql;        //要执行的查询语句protected:void run();signals:void receiveCount(quint32 count, double msec);public slots://设置数据库连接名称void setConnName(const QString &connName);//设置要执行的查询语句void setSql(const QString &sql);//查询行数void select();
};class DbPage : public QObject
{Q_OBJECT
public:enum DbType {DbType_ODBC = 0,        //odbc数据源DbType_Sqlite = 1,      //sqlite数据库DbType_MySql = 2,       //mysql数据库DbType_PostgreSQL = 3,  //postgresql数据库DbType_SqlServer = 4,   //sqlserver数据库DbType_Oracle = 5,      //oracle数据库DbType_KingBase = 6,    //人大金仓数据库DbType_Other = 255      //其他数据库};explicit DbPage(QObject *parent = 0);//绑定数据到下拉框static void bindData(const QString &columnName, const QString &orderColumn, const QString &tableName,QComboBox *cbox, const QString &connName = "qt_sql_default_connection");static void bindData(const QString &columnName, const QString &orderColumn, const QString &tableName,QList<QComboBox *> cboxs, const QString &connName = "qt_sql_default_connection");private:int startIndex;             //分页开始索引,每次翻页都变动SqlQueryModel *queryModel;  //查询模型QLabel *labPageTotal;       //总页数标签QLabel *labPageCurrent;     //当前页标签QLabel *labRecordsTotal;    //总记录数标签QLabel *labRecordsPerpage;  //每页记录数标签QLabel *labSelectTime;      //显示查询用时标签QLabel *labSelectInfo;      //总页数当前页总记录数每页记录数QTableView *tableView;      //显示数据的表格对象QAbstractButton *btnFirst;  //第一页按钮对象QAbstractButton *btnPrevious;//上一页按钮对象QAbstractButton *btnNext;   //下一页按钮对象QAbstractButton *btnLast;   //末一页按钮对象QString countName;          //统计表行数用字段QString connName;           //所使用的数据库连接名DbType dbType;              //数据库类型quint32 pageCurrent;        //当前第几页quint32 pageTotal;          //总页数quint32 recordsTotal;       //总记录数quint32 recordsPerpage;     //每页显示记录数QString tableName;          //表名QString selectColumn;       //要查询的字段集合QString orderSql;           //排序语句QString whereSql;           //条件语句QList<QString> columnNames; //列名集合QList<int> columnWidths;    //列宽集合int insertColumnIndex;      //插入的列的索引位置QString insertColumnName;   //插入的列的标题int insertColumnWidth;      //插入的列的宽度private slots://绑定sql语句到表格void bindData(const QString &sql);//生成分页sql语句QString getPageSql();//收到记录行数void slot_receiveCount(quint32 count, double msec);signals://将翻页后的页码信息发出去可能其他地方要用到void receivePage(quint32 pageCurrent, quint32 pageTotal, quint32 recordsTotal, quint32 recordsPerpage);void receiveCount(quint32 count, double msec);public slots://设置需要显示数据的表格,数据翻页对应的按钮void setControl(QTableView *tableView,QLabel *labPageTotal, QLabel *labPageCurrent,QLabel *labRecordsTotal, QLabel *labRecordsPerpage,QLabel *labSelectTime, QLabel *labSelectInfo,QAbstractButton *btnFirst, QAbstractButton *btnPrevious,QAbstractButton *btnNext, QAbstractButton *btnLast,const QString &countName, const QString &connName = "qt_sql_default_connection");void setControl(QTableView *tableView,QLabel *labPageTotal, QLabel *labPageCurrent,QLabel *labRecordsTotal, QLabel *labRecordsPerpage,QLabel *labSelectTime, QLabel *labSelectInfo,const QString &countName, const QString &connName = "qt_sql_default_connection");void setControl(QTableView *tableView,QAbstractButton *btnFirst, QAbstractButton *btnPrevious,QAbstractButton *btnNext, QAbstractButton *btnLast,const QString &countName, const QString &connName = "qt_sql_default_connection");void setControl(QTableView *tableView,const QString &countName, const QString &connName = "qt_sql_default_connection");//设置数据库连接名称void setConnName(const QString &connName);//设置数据库类型void setDbType(const DbType &dbType);//设置要查询的表名void setTableName(const QString &tableName);//设置要查询的字段列名集合void setSelectColumn(const QString &selectColumn);//设置排序sqlvoid setOrderSql(const QString &orderSql);//设置条件sqlvoid setWhereSql(const QString &whereSql);//设置每页显示多少行数据void setRecordsPerpage(int recordsPerpage);//设置列名称集合void setColumnNames(const QList<QString> &columnNames);//设置列宽度集合void setColumnWidths(const QList<int> &columnWidths);//设置所有列居中void setAllCenter(bool allCenter);//设置居中对齐列索引集合void setAlignCenterColumn(const QList<int> &alignCenterColumn);//设置右对齐列索引集合void setAlignRightColumn(const QList<int> &alignRightColumn);//设置插入的列的索引void setInsertColumnIndex(int insertColumnIndex);//设置插入的列的标题void setInsertColumnName(const QString &insertColumnName);//设置插入的列的宽度void setInsertColumnWidth(int insertColumnWidth);//根据首页末页禁用按钮void changeBtnEnable();//执行查询void select();//指定页跳转void selectPage(int page);//翻页 第一页+上一页+下一页+末一页void first();void previous();void next();void last();
};#endif // DBPAGE_H

源码下载

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/587114.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Micron FY24 Q2业绩强劲,凭内存实现翻盘

根据TechInsights数据显示&#xff0c;美光科技24财年第二季度业绩强劲&#xff0c;公司通过技术创新和产能优化&#xff0c;成功抓住了AI服务器和其他高性能应用带来的市场需求增长机遇。尽管短期内面临供应紧张的问题&#xff0c;但美光通过加大研发投入和产能转换力度&#…

Java8 Stream API全面解析——高效流式编程的秘诀

文章目录 什么是 Stream Api?快速入门流的操作创建流中间操作filter 过滤map 数据转换flatMap 合并流distinct 去重sorted 排序limit 限流skip 跳过peek 操作 终结操作forEach 遍历forEachOrdered 有序遍历count 统计数量min 最小值max 最大值reduce 聚合collect 收集anyMatch…

NumPy创建ndarray数组大揭秘

1.使用 np.array() 创建 使用 np.array() 由 python list 创建 n np.array(list) 注意 numpy 默认 ndarray 的所有元素的类型是相同的 如果传进来的列表中包含不同的类型&#xff0c;则统一为同一类型&#xff0c;优先级&#xff1a;str > float > int ndarray 的常…

阿赵UE学习笔记——24、动画播放控制

阿赵UE学习笔记目录   大家好&#xff0c;我是阿赵。   继续学习虚幻引擎的使用。关于UE的动画系统&#xff0c;之前学习了很多&#xff0c;包括动画合成或者动画蒙太奇等&#xff0c;实际上最后得到的都是一个动画片段。那么这些动画片段&#xff0c;是需要怎样播放控制呢…

某东手势验证

地球上最强版&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 成功率99 基本不失败&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01;&#xff01; 识别速…

vmware让其他pc访问vmware中服务器的ip

端口转发 虚拟网络编辑器 nat设置 添加nat设置

图的应用试题

01&#xff0e;任何一个无向连通图的最小生成树( )。 A.有一棵或多棵 B.只有一棵 C.一定有多棵 D.可能不存在 02.用Prim算法和Kruskal算法构造图的最小生成树&#xff0c;…

vue-ueditor-wrap上传图片报错:后端配置项没有正常加载,上传插件不能正常使用

如图所示,今天接收一个项目其中富文本编辑器报错 此项目为vue2项目,富文本编辑器为直接下载好的资源存放在public目录下的 经过排查发现报错的函数在ueditor.all.min.js文件内,但是ueditor.all.min.js文件夹是经过压缩的 所以直接,将index.html中的引用路径修改为ueditor…

6.8物联网RK3399项目开发实录-驱动开发之RTC实时时钟的使用(wulianjishu666)

90款行业常用传感器单片机程序及资料【stm32,stc89c52,arduino适用】 链接&#xff1a;https://pan.baidu.com/s/1M3u8lcznKuXfN8NRoLYtTA?pwdc53f RTC 使用 简介 AIO-3399J 开发板上有 一个集成于 RK808 上的RTC(Real Time Clock)&#xff0c;主要功能有时钟&#xff0c…

图片标注编辑平台搭建系列教程(6)——fabric渲染原理

原理 fabric的渲染步骤大致如下&#xff1a; 渲染前都设置背景图然后调用ctx.save()&#xff0c;存储画布的绘制状态参数然后调用每个object自身的渲染方法最后调用ctx.restore()&#xff0c;恢复画布的保存状态后处理&#xff0c;例如控制框的渲染等 值得注意的是&#xff0…

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现

基于JavaWEB SSM SpringBoot婚纱影楼摄影预约网站设计和实现 博主介绍&#xff1a;多年java开发经验&#xff0c;专注Java开发、定制、远程、文档编写指导等,csdn特邀作者、专注于Java技术领域 作者主页 央顺技术团队 Java毕设项目精品实战案例《1000套》 欢迎点赞 收藏 ⭐留言…

密钥的类型与哈希算法

对称密钥 对称密钥&#xff0c;不安全&#xff0c;密钥传递过程中会被获取 非对称密钥 非对称密钥&#xff0c;紫给所有人发公钥&#xff0c;牛用紫的公钥加密&#xff0c;只有紫用自己的私钥打开&#xff0c;同理紫给牛回信&#xff0c;紫用牛的公接下来的通信都用对称密钥钥…