彻底改进分页算法

master
feiyangqingyun 2021-04-27 07:43:06 +08:00
parent ad376e82be
commit 822eae261b
8 changed files with 250 additions and 239 deletions

View File

@ -115,11 +115,13 @@ void DbCountThread::select()
{ {
//计算用时 //计算用时
QDateTime dtStart = QDateTime::currentDateTime(); QDateTime dtStart = QDateTime::currentDateTime();
int count = 0;
QSqlQuery query(QSqlDatabase::database(connName)); QSqlQuery query(QSqlDatabase::database(connName));
query.exec(sql); if (query.exec(sql)) {
query.next(); if (query.next()) {
int count = query.value(0).toUInt(); count = query.value(0).toUInt();
}
}
QDateTime dtEnd = QDateTime::currentDateTime(); QDateTime dtEnd = QDateTime::currentDateTime();
double msec = dtStart.msecsTo(dtEnd); double msec = dtStart.msecsTo(dtEnd);
@ -127,40 +129,26 @@ void DbCountThread::select()
} }
QScopedPointer<DbPage> DbPage::self;
DbPage *DbPage::Instance()
{
if (self.isNull()) {
static QMutex mutex;
QMutexLocker locker(&mutex);
if (self.isNull()) {
self.reset(new DbPage);
}
}
return self.data();
}
DbPage::DbPage(QObject *parent) : QObject(parent) DbPage::DbPage(QObject *parent) : QObject(parent)
{ {
startIndex = 0; startIndex = 0;
queryModel = new SqlQueryModel; queryModel = new SqlQueryModel;
pageCurrent = 1; pageCurrent = 1;
pageCount = 0; pageTotal = 0;
resultCount = 0; recordsTotal = 0;
resultCurrent = 0; recordsPerpage = 0;
labPageCount = 0; labPageTotal = 0;
labPageCurrent = 0; labPageCurrent = 0;
labResultCount = 0; labRecordsTotal = 0;
labResultCurrent = 0; labRecordsPerpage = 0;
labResult = 0; labSelectTime = 0;
labInfo = 0; labSelectInfo = 0;
tableView = 0; tableView = 0;
btnFirst = 0; btnFirst = 0;
btnPre = 0; btnPrevious = 0;
btnNext = 0; btnNext = 0;
btnLast = 0; btnLast = 0;
@ -169,9 +157,9 @@ DbPage::DbPage(QObject *parent) : QObject(parent)
dbType = DbType_Sqlite; dbType = DbType_Sqlite;
pageCurrent = 0; pageCurrent = 0;
pageCount = 0; pageTotal = 0;
resultCount = 0; recordsTotal = 0;
resultCurrent = 30; recordsPerpage = 30;
tableName = ""; tableName = "";
selectColumn = "*"; selectColumn = "*";
@ -238,24 +226,30 @@ void DbPage::bindData(const QString &sql)
labPageCurrent->setText(QString("第 %1 页").arg(pageCurrent)); labPageCurrent->setText(QString("第 %1 页").arg(pageCurrent));
} }
if (labPageCount != 0) { if (labPageTotal != 0) {
labPageCount->setText(QString("共 %1 页").arg(pageCount)); labPageTotal->setText(QString("共 %1 页").arg(pageTotal));
} }
if (labResultCount != 0) { if (labRecordsTotal != 0) {
labResultCount->setText(QString("共 %1 条").arg(resultCount)); labRecordsTotal->setText(QString("共 %1 条").arg(recordsTotal));
} }
if (labResultCurrent != 0) { if (labRecordsPerpage != 0) {
labResultCurrent->setText(QString("每页 %1 条").arg(resultCurrent)); labRecordsPerpage->setText(QString("每页 %1 条").arg(recordsPerpage));
} }
if (labInfo != 0) { if (labSelectInfo != 0) {
labInfo->setText(QString("共 %1 条 每页 %2 条 共 %3 页 第 %4 页").arg(resultCount).arg(resultCurrent).arg(pageCount).arg(pageCurrent)); //labSelectInfo->setText(QString("共 %1 条 每页 %2 条 共 %3 页 第 %4 页").arg(recordsTotal).arg(recordsPerpage).arg(pageTotal).arg(pageCurrent));
labSelectInfo->setText(QString("第 %1 页 每页 %2 条 共 %3 页 共 %4 条").arg(pageCurrent).arg(recordsPerpage).arg(pageTotal).arg(recordsTotal));
} }
//发送结果信号 //发送结果信号
emit receivePage(pageCurrent, pageCount, resultCount, resultCurrent); if (recordsTotal != recordsPerpage) {
emit receivePage(pageCurrent, pageTotal, recordsTotal, recordsPerpage);
//qDebug() << TIMEMS << startIndex << pageCurrent << pageTotal << recordsTotal << recordsPerpage;
}
changeBtnEnable();
} }
QString DbPage::getPageSql() QString DbPage::getPageSql()
@ -263,14 +257,14 @@ QString DbPage::getPageSql()
//组织分页SQL语句,不同的数据库分页语句不一样 //组织分页SQL语句,不同的数据库分页语句不一样
QString sql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql); QString sql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql);
if (dbType == DbType_PostgreSQL || dbType == DbType_KingBase) { if (dbType == DbType_PostgreSQL || dbType == DbType_KingBase) {
sql = QString("%1 limit %3 offset %2;").arg(sql).arg(startIndex).arg(resultCurrent); sql = QString("%1 limit %3 offset %2;").arg(sql).arg(startIndex).arg(recordsPerpage);
} else if (dbType == DbType_SqlServer) { } else if (dbType == DbType_SqlServer) {
//取第m条到第n条记录select top (n-m+1) id from tablename where id not in (select top m-1 id from tablename) //取第m条到第n条记录select top (n-m+1) id from tablename where id not in (select top m-1 id from tablename)
//sql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql); //sql = QString("select %1 from %2 %3 order by %4").arg(selectColumn).arg(tableName).arg(whereSql).arg(orderSql);
} else if (dbType == DbType_Oracle) { } else if (dbType == DbType_Oracle) {
//暂时没有找到好办法 //暂时没有找到好办法
} else { } else {
sql = QString("%1 limit %2,%3;").arg(sql).arg(startIndex).arg(resultCurrent); sql = QString("%1 limit %2,%3;").arg(sql).arg(startIndex).arg(recordsPerpage);
} }
return sql; return sql;
@ -278,120 +272,46 @@ QString DbPage::getPageSql()
void DbPage::slot_receiveCount(quint32 count, double msec) void DbPage::slot_receiveCount(quint32 count, double msec)
{ {
if (labResult != 0) { if (labSelectTime != 0) {
labResult->setText(QString("查询用时 %1 秒").arg(QString::number(msec / 1000, 'f', 3))); labSelectTime->setText(QString("查询用时 %1 秒").arg(QString::number(msec / 1000, 'f', 3)));
} }
resultCount = count; recordsTotal = count;
int yushu = recordsTotal % recordsPerpage;
int yushu = resultCount % resultCurrent;
//不存在余数,说明是整行,例如300%5==0 //不存在余数,说明是整行,例如300%5==0
if (yushu == 0) { if (yushu == 0) {
if (resultCount > 0 && resultCount < resultCurrent) { if (recordsTotal > 0 && recordsTotal < recordsPerpage) {
pageCount = 1; pageTotal = 1;
} else { } else {
pageCount = resultCount / resultCurrent; pageTotal = recordsTotal / recordsPerpage;
} }
} else { } else {
pageCount = (resultCount / resultCurrent) + 1; pageTotal = (recordsTotal / recordsPerpage) + 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);
} }
bindData(getPageSql()); bindData(getPageSql());
} }
void DbPage::first()
{
if (pageCount > 1) {
startIndex = 0;
pageCurrent = 1;
bindData(getPageSql());
btnLast->setEnabled(true);
btnNext->setEnabled(true);
}
btnFirst->setEnabled(false);
btnPre->setEnabled(false);
}
void DbPage::previous()
{
if (pageCurrent > 1) {
pageCurrent--;
startIndex -= resultCurrent;
bindData(getPageSql());
btnLast->setEnabled(true);
btnNext->setEnabled(true);
}
if (pageCurrent == 1) {
btnFirst->setEnabled(false);
btnPre->setEnabled(false);
}
}
void DbPage::next()
{
if (pageCurrent < pageCount) {
pageCurrent++;
startIndex += resultCurrent;
bindData(getPageSql());
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;
bindData(getPageSql());
btnFirst->setEnabled(true);
btnPre->setEnabled(true);
}
btnLast->setEnabled(false);
btnNext->setEnabled(false);
}
//设置显示数据的表格控件,当前翻页信息的标签控件等 //设置显示数据的表格控件,当前翻页信息的标签控件等
void DbPage::setControl(QTableView *tableView, void DbPage::setControl(QTableView *tableView,
QLabel *labPageCount, QLabel *labPageCurrent, QLabel *labPageTotal, QLabel *labPageCurrent,
QLabel *labResultCount, QLabel *labResultCurrent, QLabel *labRecordsTotal, QLabel *labRecordsPerpage,
QLabel *labResult, QLabel *labInfo, QLabel *labSelectTime, QLabel *labSelectInfo,
QAbstractButton *btnFirst, QAbstractButton *btnPre, QAbstractButton *btnFirst, QAbstractButton *btnPrevious,
QAbstractButton *btnNext, QAbstractButton *btnLast, QAbstractButton *btnNext, QAbstractButton *btnLast,
const QString &countName, const QString &connName) const QString &countName, const QString &connName)
{ {
this->tableView = tableView; this->tableView = tableView;
this->labPageCount = labPageCount; this->labPageTotal = labPageTotal;
this->labPageCurrent = labPageCurrent; this->labPageCurrent = labPageCurrent;
this->labResultCount = labResultCount; this->labRecordsTotal = labRecordsTotal;
this->labResultCurrent = labResultCurrent; this->labRecordsPerpage = labRecordsPerpage;
this->labResult = labResult; this->labSelectTime = labSelectTime;
this->labInfo = labInfo; this->labSelectInfo = labSelectInfo;
this->btnFirst = btnFirst; this->btnFirst = btnFirst;
this->btnPre = btnPre; this->btnPrevious = btnPrevious;
this->btnNext = btnNext; this->btnNext = btnNext;
this->btnLast = btnLast; this->btnLast = btnLast;
@ -399,13 +319,39 @@ void DbPage::setControl(QTableView *tableView,
this->connName = connName; this->connName = connName;
this->tableView->setSelectionBehavior(QAbstractItemView::SelectRows); this->tableView->setSelectionBehavior(QAbstractItemView::SelectRows);
if (btnFirst == 0 || btnPrevious == 0 || btnNext == 0 || btnLast == 0) {
return;
}
//挂载翻页按钮事件 //挂载翻页按钮事件
connect(btnFirst, SIGNAL(clicked()), this, SLOT(first())); connect(btnFirst, SIGNAL(clicked()), this, SLOT(first()));
connect(btnPre, SIGNAL(clicked()), this, SLOT(previous())); connect(btnPrevious, SIGNAL(clicked()), this, SLOT(previous()));
connect(btnNext, SIGNAL(clicked()), this, SLOT(next())); connect(btnNext, SIGNAL(clicked()), this, SLOT(next()));
connect(btnLast, SIGNAL(clicked()), this, SLOT(last())); connect(btnLast, SIGNAL(clicked()), this, SLOT(last()));
} }
void DbPage::setControl(QTableView *tableView,
QLabel *labPageTotal, QLabel *labPageCurrent,
QLabel *labRecordsTotal, QLabel *labRecordsPerpage,
QLabel *labSelectTime, QLabel *labSelectInfo,
const QString &countName, const QString &connName)
{
setControl(tableView, labPageTotal, labPageCurrent, labRecordsTotal, labRecordsPerpage, labSelectTime, labSelectInfo, 0, 0, 0, 0, countName, connName);
}
void DbPage::setControl(QTableView *tableView,
QAbstractButton *btnFirst, QAbstractButton *btnPrevious,
QAbstractButton *btnNext, QAbstractButton *btnLast,
const QString &countName, const QString &connName)
{
setControl(tableView, 0, 0, 0, 0, 0, 0, btnFirst, btnPrevious, btnNext, btnLast, countName, connName);
}
void DbPage::setControl(QTableView *tableView, const QString &countName, const QString &connName)
{
setControl(tableView, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, countName, connName);
}
void DbPage::setConnName(const QString &connName) void DbPage::setConnName(const QString &connName)
{ {
this->connName = connName; this->connName = connName;
@ -436,9 +382,9 @@ void DbPage::setWhereSql(const QString &whereSql)
this->whereSql = whereSql; this->whereSql = whereSql;
} }
void DbPage::setResultCurrent(int resultCurrent) void DbPage::setRecordsPerpage(int recordsPerpage)
{ {
this->resultCurrent = resultCurrent; this->recordsPerpage = recordsPerpage;
} }
void DbPage::setColumnNames(const QList<QString> &columnNames) void DbPage::setColumnNames(const QList<QString> &columnNames)
@ -481,45 +427,62 @@ void DbPage::setInsertColumnWidth(int insertColumnWidth)
this->insertColumnWidth = insertColumnWidth; this->insertColumnWidth = insertColumnWidth;
} }
void DbPage::changeBtnEnable()
{
if (btnFirst == 0 || btnPrevious == 0 || btnNext == 0 || btnLast == 0) {
return;
}
//下面默认对上一页下一页按钮禁用
//也可以取消注释对第一页末一页同样处理
//因为到了第一页就可以不必再单击第一页和上一页
if (pageTotal <= 1) {
//如果只有一页数据则翻页按钮不可用
btnFirst->setEnabled(false);
btnLast->setEnabled(false);
btnPrevious->setEnabled(false);
btnNext->setEnabled(false);
} else {
//判断是否在首页末页禁用按钮
bool first = (pageCurrent == 1);
bool last = (pageCurrent == pageTotal);
btnFirst->setEnabled(!first);
btnLast->setEnabled(!last);
btnPrevious->setEnabled(!first);
btnNext->setEnabled(!last);
}
}
void DbPage::select() void DbPage::select()
{ {
//重置开始索引 //重置开始索引
startIndex = 0; startIndex = 0;
pageCurrent = 1; pageCurrent = 1;
pageTotal = 1;
changeBtnEnable();
//假设只有一页 //假设只有一页
slot_receiveCount(resultCurrent, 0); slot_receiveCount(recordsPerpage, 0);
//全部禁用按钮,文本显示正在查询...
btnFirst->setEnabled(false);
btnLast->setEnabled(false);
btnNext->setEnabled(false);
btnPre->setEnabled(false);
//文本显示正在查询...
QString info = "正在查询..."; QString info = "正在查询...";
if (labSelectInfo != 0) {
if (labInfo != 0) { labSelectInfo->setText(info);
labInfo->setText(info);
} }
if (labPageCurrent != 0) { if (labPageCurrent != 0) {
labPageCurrent->setText(info); labPageCurrent->setText(info);
} }
if (labPageTotal != 0) {
if (labPageCount != 0) { labPageTotal->setText(info);
labPageCount->setText(info);
} }
if (labRecordsTotal != 0) {
if (labResultCount != 0) { labRecordsTotal->setText(info);
labResultCount->setText(info);
} }
if (labRecordsPerpage != 0) {
if (labResultCurrent != 0) { labRecordsPerpage->setText(info);
labResultCurrent->setText(info);
} }
if (labSelectTime != 0) {
if (labResult != 0) { labSelectTime->setText(info);
labResult->setText(info);
} }
//开始分页绑定数据前,计算好总数据量以及行数 //开始分页绑定数据前,计算好总数据量以及行数
@ -541,3 +504,54 @@ void DbPage::select()
dbCountThread->select(); dbCountThread->select();
#endif #endif
} }
void DbPage::selectPage(int page)
{
//必须小于总页数+不是当前页
if (page >= 1 && page <= pageTotal && page != pageCurrent) {
//计算指定页对应开始的索引
startIndex = (page - 1) * recordsPerpage;
pageCurrent = page;
bindData(getPageSql());
}
}
void DbPage::first()
{
//当前页不是第一页才能切换到第一页
if (pageTotal > 1 && pageCurrent != 1) {
startIndex = 0;
pageCurrent = 1;
bindData(getPageSql());
}
}
void DbPage::previous()
{
//当前页不是第一页才能上一页
if (pageCurrent > 1) {
pageCurrent--;
startIndex -= recordsPerpage;
bindData(getPageSql());
}
}
void DbPage::next()
{
//当前页小于总页数才能下一页
if (pageCurrent < pageTotal) {
pageCurrent++;
startIndex += recordsPerpage;
bindData(getPageSql());
}
}
void DbPage::last()
{
//当前页不是末尾页才能切换到末尾页
if (pageTotal > 1 && pageCurrent != pageTotal) {
startIndex = (pageTotal - 1) * recordsPerpage;
pageCurrent = pageTotal;
bindData(getPageSql());
}
}

View File

@ -37,13 +37,10 @@ private:
public: public:
//设置所有列居中 //设置所有列居中
void setAllCenter(bool allCenter); void setAllCenter(bool allCenter);
//设置居中对齐列索引集合 //设置居中对齐列索引集合
void setAlignCenterColumn(const QList<int> &alignCenterColumn); void setAlignCenterColumn(const QList<int> &alignCenterColumn);
//设置右对齐列索引集合 //设置右对齐列索引集合
void setAlignRightColumn(const QList<int> &alignRightColumn); void setAlignRightColumn(const QList<int> &alignRightColumn);
}; };
//计算复合条件的记录总行数,以便分页 //计算复合条件的记录总行数,以便分页
@ -87,7 +84,6 @@ public:
DbType_Other = 255 //其他数据库 DbType_Other = 255 //其他数据库
}; };
static DbPage *Instance();
explicit DbPage(QObject *parent = 0); explicit DbPage(QObject *parent = 0);
//绑定数据到下拉框 //绑定数据到下拉框
@ -97,21 +93,19 @@ public:
QList<QComboBox *> cboxs, const QString &connName = "qt_sql_default_connection"); QList<QComboBox *> cboxs, const QString &connName = "qt_sql_default_connection");
private: private:
static QScopedPointer<DbPage> self;
int startIndex; //分页开始索引,每次翻页都变动 int startIndex; //分页开始索引,每次翻页都变动
SqlQueryModel *queryModel; //查询模型 SqlQueryModel *queryModel; //查询模型
QLabel *labPageCount; //总页数标签 QLabel *labPageTotal; //总页数标签
QLabel *labPageCurrent; //当前页标签 QLabel *labPageCurrent; //当前页标签
QLabel *labResultCount; //总记录数标签 QLabel *labRecordsTotal; //总记录数标签
QLabel *labResultCurrent; //每页记录数标签 QLabel *labRecordsPerpage; //每页记录数标签
QLabel *labResult; //显示查询用时标签 QLabel *labSelectTime; //显示查询用时标签
QLabel *labInfo; //总页数当前页总记录数每页记录数 QLabel *labSelectInfo; //总页数当前页总记录数每页记录数
QTableView *tableView; //显示数据的表格对象 QTableView *tableView; //显示数据的表格对象
QAbstractButton *btnFirst; //第一页按钮对象 QAbstractButton *btnFirst; //第一页按钮对象
QAbstractButton *btnPre; //上一页按钮对象 QAbstractButton *btnPrevious;//上一页按钮对象
QAbstractButton *btnNext; //下一页按钮对象 QAbstractButton *btnNext; //下一页按钮对象
QAbstractButton *btnLast; //末一页按钮对象 QAbstractButton *btnLast; //末一页按钮对象
@ -120,9 +114,9 @@ private:
DbType dbType; //数据库类型 DbType dbType; //数据库类型
quint32 pageCurrent; //当前第几页 quint32 pageCurrent; //当前第几页
quint32 pageCount; //总页数 quint32 pageTotal; //总页数
quint32 resultCount; //总记录数 quint32 recordsTotal; //总记录数
quint32 resultCurrent; //每页显示记录数 quint32 recordsPerpage; //每页显示记录数
QString tableName; //表名 QString tableName; //表名
QString selectColumn; //要查询的字段集合 QString selectColumn; //要查询的字段集合
@ -135,12 +129,6 @@ private:
QString insertColumnName; //插入的列的标题 QString insertColumnName; //插入的列的标题
int insertColumnWidth; //插入的列的宽度 int insertColumnWidth; //插入的列的宽度
private slots:
void first(); //第一页
void previous(); //上一页
void next(); //下一页
void last(); //末一页
private slots: private slots:
//绑定sql语句到表格 //绑定sql语句到表格
void bindData(const QString &sql); void bindData(const QString &sql);
@ -151,66 +139,79 @@ private slots:
void slot_receiveCount(quint32 count, double msec); void slot_receiveCount(quint32 count, double msec);
signals: signals:
void receivePage(quint32 pageCurrent, quint32 pageCount, quint32 resultCount, quint32 resultCurrent); //将翻页后的页码信息发出去可能其他地方要用到
void receivePage(quint32 pageCurrent, quint32 pageTotal, quint32 recordsTotal, quint32 recordsPerpage);
void receiveCount(quint32 count, double msec); void receiveCount(quint32 count, double msec);
public slots: public slots:
//设置需要显示数据的表格,数据翻页对应的按钮 //设置需要显示数据的表格,数据翻页对应的按钮
void setControl(QTableView *tableView, void setControl(QTableView *tableView,
QLabel *labPageCount, QLabel *labPageCurrent, QLabel *labPageTotal, QLabel *labPageCurrent,
QLabel *labResultCount, QLabel *labResultCurrent, QLabel *labRecordsTotal, QLabel *labRecordsPerpage,
QLabel *labResult, QLabel *labInfo, QLabel *labSelectTime, QLabel *labSelectInfo,
QAbstractButton *btnFirst, QAbstractButton *btnPre, QAbstractButton *btnFirst, QAbstractButton *btnPrevious,
QAbstractButton *btnNext, QAbstractButton *btnLast, QAbstractButton *btnNext, QAbstractButton *btnLast,
const QString &countName, const QString &connName = "qt_sql_default_connection"); 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 setConnName(const QString &connName);
//设置数据库类型 //设置数据库类型
void setDbType(const DbType &dbType); void setDbType(const DbType &dbType);
//设置要查询的表名 //设置要查询的表名
void setTableName(const QString &tableName); void setTableName(const QString &tableName);
//设置要查询的字段列名集合 //设置要查询的字段列名集合
void setSelectColumn(const QString &selectColumn); void setSelectColumn(const QString &selectColumn);
//设置排序sql //设置排序sql
void setOrderSql(const QString &orderSql); void setOrderSql(const QString &orderSql);
//设置条件sql //设置条件sql
void setWhereSql(const QString &whereSql); void setWhereSql(const QString &whereSql);
//设置每页显示多少行数据 //设置每页显示多少行数据
void setResultCurrent(int resultCurrent); void setRecordsPerpage(int recordsPerpage);
//设置列名称集合 //设置列名称集合
void setColumnNames(const QList<QString> &columnNames); void setColumnNames(const QList<QString> &columnNames);
//设置列宽度集合 //设置列宽度集合
void setColumnWidths(const QList<int> &columnWidths); void setColumnWidths(const QList<int> &columnWidths);
//设置所有列居中 //设置所有列居中
void setAllCenter(bool allCenter); void setAllCenter(bool allCenter);
//设置居中对齐列索引集合 //设置居中对齐列索引集合
void setAlignCenterColumn(const QList<int> &alignCenterColumn); void setAlignCenterColumn(const QList<int> &alignCenterColumn);
//设置右对齐列索引集合 //设置右对齐列索引集合
void setAlignRightColumn(const QList<int> &alignRightColumn); void setAlignRightColumn(const QList<int> &alignRightColumn);
//设置插入的列的索引 //设置插入的列的索引
void setInsertColumnIndex(int insertColumnIndex); void setInsertColumnIndex(int insertColumnIndex);
//设置插入的列的标题 //设置插入的列的标题
void setInsertColumnName(const QString &insertColumnName); void setInsertColumnName(const QString &insertColumnName);
//设置插入的列的宽度 //设置插入的列的宽度
void setInsertColumnWidth(int insertColumnWidth); void setInsertColumnWidth(int insertColumnWidth);
//根据首页末页禁用按钮
void changeBtnEnable();
//执行查询 //执行查询
void select(); void select();
//指定页跳转
void selectPage(int page);
//翻页 第一页+上一页+下一页+末一页
void first();
void previous();
void next();
void last();
}; };
#endif // DBPAGE_H #endif // DBPAGE_H

View File

@ -46,22 +46,20 @@ void frmDbPage::initForm()
dbPage = new DbPage(this); dbPage = new DbPage(this);
//设置所有列居中显示 //设置所有列居中显示
dbPage->setAllCenter(true); dbPage->setAllCenter(true);
dbPage->setControl(ui->tableMain, ui->labPageCount, ui->labPageCurrent, ui->labResultCount, ui->labResultCurrent, ui->labResult, 0, dbPage->setControl(ui->tableMain, ui->labPageTotal, ui->labPageCurrent, ui->labRecordsTotal, ui->labRecordsPerpage,
ui->btnFirst, ui->btnPre, ui->btnNext, ui->btnLast, countName); ui->labSelectTime, 0, ui->btnFirst, ui->btnPreVious, ui->btnNext, ui->btnLast, countName);
ui->tableMain->horizontalHeader()->setStretchLastSection(true); ui->tableMain->horizontalHeader()->setStretchLastSection(true);
ui->tableMain->verticalHeader()->setDefaultSectionSize(25); ui->tableMain->verticalHeader()->setDefaultSectionSize(25);
} }
void frmDbPage::on_btnSelect_clicked() void frmDbPage::on_btnSelect_clicked()
{ {
ui->labResult->setText("正在查询...");
//绑定数据到表格 //绑定数据到表格
QString sql = "where 1=1"; QString sql = "where 1=1";
dbPage->setTableName(tableName); dbPage->setTableName(tableName);
dbPage->setOrderSql(QString("%1 %2").arg(countName).arg("asc")); dbPage->setOrderSql(QString("%1 %2").arg(countName).arg("asc"));
dbPage->setWhereSql(sql); dbPage->setWhereSql(sql);
dbPage->setResultCurrent(20); dbPage->setRecordsPerpage(20);
dbPage->setColumnNames(columnNames); dbPage->setColumnNames(columnNames);
dbPage->setColumnWidths(columnWidths); dbPage->setColumnWidths(columnWidths);
dbPage->select(); dbPage->select();

View File

@ -88,7 +88,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QPushButton" name="btnPre"> <widget class="QPushButton" name="btnPreVious">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>50</width> <width>50</width>
@ -164,7 +164,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="labPageCount"> <widget class="QLabel" name="labPageTotal">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
@ -186,7 +186,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="labResultCount"> <widget class="QLabel" name="labRecordsTotal">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
@ -230,7 +230,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="labResultCurrent"> <widget class="QLabel" name="labRecordsPerpage">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>
@ -252,7 +252,7 @@
</widget> </widget>
</item> </item>
<item> <item>
<widget class="QLabel" name="labResult"> <widget class="QLabel" name="labSelectTime">
<property name="minimumSize"> <property name="minimumSize">
<size> <size>
<width>0</width> <width>0</width>

View File

@ -24,13 +24,12 @@ class QCheckBox;
class QScrollBar; class QScrollBar;
#ifdef quc #ifdef quc
class Q_DECL_EXPORT FlatUI : public QObject class Q_DECL_EXPORT FlatUI
#else #else
class FlatUI : public QObject class FlatUI
#endif #endif
{ {
Q_OBJECT
public: public:
//设置按钮样式 //设置按钮样式
static QString setPushButtonQss(QPushButton *btn, //按钮对象 static QString setPushButtonQss(QPushButton *btn, //按钮对象

View File

@ -3,8 +3,7 @@
#include <QWidget> #include <QWidget>
namespace Ui namespace Ui {
{
class frmFlatUI; class frmFlatUI;
} }

View File

@ -7,9 +7,9 @@
#include <QPainterPath> #include <QPainterPath>
#ifdef quc #ifdef quc
class Q_DECL_EXPORT SmoothCurve : public QObject class Q_DECL_EXPORT SmoothCurve
#else #else
class SmoothCurve : public QObject class SmoothCurve
#endif #endif
{ {