《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.mzph.cn/news/788119.shtml

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

相关文章

机器学习 | 线性判别分析(Linear Discriminant Analysis)

1 机器学习中的建模 1.1 描述性建模 以方便的形式给出数据的主要特征&#xff0c;实质上是对数据的概括&#xff0c;以便在大量的或有噪声的数据中仍能观察到重要特征。重在认识数据的主要概貌&#xff0c;理解数据的重要特征。 Task&#xff1a;聚类分析&#xff0c;数据降…

C++类和对象第三讲总结

1.对象指针&#xff1a;指针->成员 // 指针存放了对象的地址 // 指针作为函数参数&#xff0c;可以真正改变对象成员的值 // 指针可以指向对象数组&#xff0c;它存放了数组首元素地址 // 指针偏移量可以访问数组的每个对象 2.一个练习案例 使用指针和对象数组打印…

【数学公式大全整理——1.0】

导数公式 积分表 万能公式 初等函数 重要极限 ### 诱导公式 和差角 和差化积 倍角公式 半角公式 正弦 余弦定理 反三角函数 高阶求导公式

数据库系统概论(超详解!!!) 第三节 关系数据库标准语言SQL(Ⅳ)

1.集合查询 集合操作的种类 并操作UNION 交操作INTERSECT 差操作EXCEPT 参加集合操作的各查询结果的列数必须相同;对应项的数据类型也必须相同 查询计算机科学系的学生及年龄不大于19岁的学生。SELECT *FROM StudentWHERE Sdept CSUNIONSELECT *FROM StudentWHERE Sage&l…

Kubernetes(k8s):部署、使用 metrics-server

Kubernetes&#xff08;k8s&#xff09;&#xff1a;部署、使用 metrics-server 一、metrics-server简介二、部署metrics-server2.1、 下载 Metrics Server 部署文件2.2、修改metrics-server.yaml 文件2.3、 部署 Metrics Server2.4、 检查 Metrics Server 三、使用 Metrics Se…

网络升级固件

资源信息 可知 &#xff1a; install\soc_cv1800b_milkv_duo_sd\boot.sd文件较设备中的同名文件多了128个字节的文件头&#xff1b;install\soc_cv1800b_milkv_duo_sd\rawimages\boot.sd文件与设备中同名文件相同&#xff1b; 环境搭建 服务器 启动TFTP服务 安装TFTP服务器…

windows下通过vscode访问ubuntu(绝大部分Linux下开发所采用的方案)

前言 本篇博客是介绍VSCode远程连接Ubuntu进行开发的解决方案&#xff0c;前提是安装好了VMWare&#xff0c;Ubuntu&#xff0c;windows下的VSCode。 嵌入式驱动学习专栏将详细记录博主学习驱动的详细过程&#xff0c;未来预计四个月将高强度更新本专栏&#xff0c;喜欢的可以关…

深信服:借助观测云实现全链路可观测性

导读 深信服科技股份有限公司 简称「深信服」&#xff08; Sangfor Technologies Inc. &#xff09;&#xff0c;是一家领先的网络安全和云计算解决方案提供商&#xff0c;致力于为全球客户提供高效、智能、安全的网络和云服务。随着公司业务的不断扩展&#xff0c;也面临着监…

OpenHarmony实战:轻量系统芯片移植准备

由于OpenHarmony工程需要在Linux环境下进行编译&#xff0c;此章节将指导厂商搭建OpenHarmony的编译环境、获取OpenHarmony源码&#xff0c;并且创建厂商工作目录完成厂商芯片的编译框架适配。 搭建编译环境 开展移植前请参考开发环境准备完成环境搭建工作。 获取源码 获取…

【Redis】Redis的类型及相关操作

一、常用的key操作命令 keys * 查看当前数据库的键值 ttl key 查看还有多少秒过期&#xff0c;-1表示永不过期&#xff0c;-2表示过期 del / unlink key 同样是删除&#xff0c;unlink是非阻塞删除&#xff0c;del则有可能导致阻塞 select dbindex 切换数据库 flushdb 清空…

群晖配置FTP服务结合内网穿透实现公网访问本地NAS中储存文件

文章目录 1. 群晖安装Cpolar2. 创建FTP公网地址3. 开启群晖FTP服务4. 群晖FTP远程连接5. 固定FTP公网地址6. 固定FTP地址连接 本文主要介绍如何在群晖NAS中开启FTP服务并结合cpolar内网穿透工具&#xff0c;实现使用固定公网地址远程访问群晖FTP服务实现文件上传下载。 Cpolar内…

文章分享:《呼吸道传染病标本采集及检测专家共识》

【摘要】呼吸道传染病临床特点多表现为发热和&#xff08;或&#xff09;呼吸道症状&#xff0c;病原学组成复杂&#xff0c;标本类型选择多样&#xff0c;如何从发热伴呼吸道症候群患者中早期正确识别出潜在呼吸道传染病患者是防控的关键环节。增强医务人员对呼吸道传染病临床…

unity学习(78)--unity调试--长痛不如短痛

1.在vs2022中&#xff0c;工具--获取工具与功能。 2. 安装图中工具&#xff0c;原来我早就安装了。 3 f9下断 同时点击图中按钮 vs此时变为如下状态 unity中出现如下提示&#xff1a; 4 在unity中运行游戏&#xff0c;vs这边确实成功断住了&#xff01;

第四百三十七回

文章目录 1. 概念介绍2. 思路与方法2.1 实现思路2.2 实现方法 3. 示例代码4. 内容总结 们在上一章回中介绍了"不同平台上换行的问题"相关的内容&#xff0c;本章回中将介绍如何在页面上显示蒙板层.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们…

【已解决】java: 无效的目标发行版: 19

问题描述 现在从Spring Boot官网下载的Spring boot文件的诸多配置的版本&#xff0c;无法直接选择和电脑已有配置相匹配的。所以直接下载安装包&#xff0c;并用IDEA打开后无法直接运行。 我在网站上下载的配置如下图&#xff1a; 我遇到的问题是运行时报错java: 无效的目标发…

Go项目结构整洁实现|GitHub 3.5k

一、前言 hi&#xff0c;大家好&#xff0c;这里是白泽。今天给大家分享一个GitHub &#x1f31f; 3.5k 的 Go项目&#xff1a;go-backend-clean-arch https://github.com/amitshekhariitbhu/go-backend-clean-architecture 这个项目是一位老外写的&#xff0c;通过一个 HTT…

【QT学习】4.浮动窗口

结果&#xff1a; 代码&#xff1a; //制作核心控件&#xff1a;文本编辑框QTextEdit* pTextEditnew QTextEdit;//制作浮动控件connect(pMenu1,&QMenu::triggered,[](QAction* pAction){qDebug()<<pAction->text()<<endl;if(pAction->text()"浮动…

WebGIS 之 Openlayer

1.导入第三方依赖 <link rel"stylesheet" href"https://lib.baomitu.com/ol3/4.6.5/ol.css"> <script src"https://lib.baomitu.com/ol3/4.6.5/ol.js"></script>2.初始化地图 初始化地图new ol.Map({}) 参数target:制定初始化…

国资委确定首批起航企业,重点布局人工智能、量子信息等新兴领域

国务院国资委近日按照“四新”&#xff08;新赛道、新技术、新平台、新机制&#xff09;标准&#xff0c;遴选确定了首批启航企业&#xff0c;加快新领域新赛道布局、培育发展新质生产力。 据了解&#xff0c;去年以来&#xff0c;国务院国资委围绕加快培育创新型国有企业&…

汉语语音基本特性

发音的生理基础和过程 人的发音生理机构如图 2.3.1所示,发音时由肺部收缩送出一股直流空气,经气管流至喉头声门处(声门即声带开口处),在发声之初,声门处的声带肌肉收缩,声带并拢间隙小于 1mm,这股直流空气冲过很小的缝隙,使声带得到横向和纵向的速度,此时,声带向两边运动,缝隙…