qt_demoe/other/dbpage/dbpage.h

218 lines
7.9 KiB
C
Raw Normal View History

2019-10-12 09:01:25 +00:00
#ifndef DBPAGE_H
#define DBPAGE_H
/**
* :feiyangqingyun(QQ:517216493) 2017-1-15
* 1:
* 2:////
* 3:
* 4:,
* 5:线,
* 6:,///
* 7:
* 8:,,,
* 9:
*/
#include <QtGui>
#include <QtSql>
2021-09-16 06:48:38 +00:00
#if (QT_VERSION >= QT_VERSION_CHECK(5,0,0))
2019-10-12 09:01:25 +00:00
#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);
2020-01-08 09:39:26 +00:00
//查询行数
void select();
2019-10-12 09:01:25 +00:00
};
class DbPage : public QObject
{
Q_OBJECT
public:
enum DbType {
2021-03-31 07:58:26 +00:00
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 //其他数据库
2019-10-12 09:01:25 +00:00
};
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; //查询模型
2021-04-26 23:43:06 +00:00
QLabel *labPageTotal; //总页数标签
2019-10-12 09:01:25 +00:00
QLabel *labPageCurrent; //当前页标签
2021-04-26 23:43:06 +00:00
QLabel *labRecordsTotal; //总记录数标签
QLabel *labRecordsPerpage; //每页记录数标签
QLabel *labSelectTime; //显示查询用时标签
QLabel *labSelectInfo; //总页数当前页总记录数每页记录数
2019-10-12 09:01:25 +00:00
QTableView *tableView; //显示数据的表格对象
QAbstractButton *btnFirst; //第一页按钮对象
2021-04-26 23:43:06 +00:00
QAbstractButton *btnPrevious;//上一页按钮对象
2019-10-12 09:01:25 +00:00
QAbstractButton *btnNext; //下一页按钮对象
QAbstractButton *btnLast; //末一页按钮对象
QString countName; //统计表行数用字段
QString connName; //所使用的数据库连接名
DbType dbType; //数据库类型
quint32 pageCurrent; //当前第几页
2021-04-26 23:43:06 +00:00
quint32 pageTotal; //总页数
quint32 recordsTotal; //总记录数
quint32 recordsPerpage; //每页显示记录数
2019-10-12 09:01:25 +00:00
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);
2021-03-31 07:58:26 +00:00
//生成分页sql语句
QString getPageSql();
2019-10-12 09:01:25 +00:00
//收到记录行数
void slot_receiveCount(quint32 count, double msec);
signals:
2021-04-26 23:43:06 +00:00
//将翻页后的页码信息发出去可能其他地方要用到
void receivePage(quint32 pageCurrent, quint32 pageTotal, quint32 recordsTotal, quint32 recordsPerpage);
2019-10-12 09:01:25 +00:00
void receiveCount(quint32 count, double msec);
public slots:
//设置需要显示数据的表格,数据翻页对应的按钮
void setControl(QTableView *tableView,
2021-04-26 23:43:06 +00:00
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,
2019-10-12 09:01:25 +00:00
QAbstractButton *btnNext, QAbstractButton *btnLast,
const QString &countName, const QString &connName = "qt_sql_default_connection");
2021-04-26 23:43:06 +00:00
void setControl(QTableView *tableView,
const QString &countName, const QString &connName = "qt_sql_default_connection");
2019-10-12 09:01:25 +00:00
//设置数据库连接名称
void setConnName(const QString &connName);
//设置数据库类型
void setDbType(const DbType &dbType);
//设置要查询的表名
void setTableName(const QString &tableName);
//设置要查询的字段列名集合
void setSelectColumn(const QString &selectColumn);
//设置排序sql
void setOrderSql(const QString &orderSql);
//设置条件sql
void setWhereSql(const QString &whereSql);
//设置每页显示多少行数据
2021-04-26 23:43:06 +00:00
void setRecordsPerpage(int recordsPerpage);
2019-10-12 09:01:25 +00:00
//设置列名称集合
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);
2021-04-26 23:43:06 +00:00
//根据首页末页禁用按钮
void changeBtnEnable();
2019-10-12 09:01:25 +00:00
//执行查询
void select();
2021-04-26 23:43:06 +00:00
//指定页跳转
void selectPage(int page);
//翻页 第一页+上一页+下一页+末一页
void first();
void previous();
void next();
void last();
2019-10-12 09:01:25 +00:00
};
#endif // DBPAGE_H