QTableWidget的翻页功能(QTableView使用相同)
pageturn.h文件
#ifndef PAGETURN_H
#define PAGETURN_H
#include <QtGui/QTableWidget>
#include <QScrollBar>
class PageTurn
{
public:
PageTurn();
// 总页数
int pageCount(QTableWidget *p);
// 跳转到指定页码
bool pageTo(QTableWidget *p, int pageNO);
// 上一页
bool pageUp(QTableWidget *p,bool isLoop);
// 下一页
bool pageDown(QTableWidget *p,bool isLoop);
// 首页
bool pageHome(QTableWidget *p);
// 尾页
bool pageEnd(QTableWidget *p);
};
#endif // PAGETURN_H
pageturn.cpp文件
#include "pageturn.h"
PageTurn::PageTurn()
{
}
int PageTurn::pageCount(QTableWidget *p)//QTableView 总页数
{
if(p == NULL) return -1;
int rowCount = p->model()->rowCount();
int rowHeight = p->rowHeight(0);
int tableViewHeight = p->height();
int rowCountPerPage = tableViewHeight/rowHeight-1;//每页显示行数
int ret = rowCount/rowCountPerPage;
int tem = rowCount%rowCountPerPage;
if (tem != 0) ret++;
return ret;
}
bool PageTurn::pageTo(QTableWidget *p, int pageNO)//翻到指定页
{
if(p == NULL) return false;
int maxPage = pageCount(p);
if(pageNO > maxPage) return false;
int rowCount = p->model()->rowCount();
int rowHeight = p->rowHeight(0);
int tableViewHeight = p->height();
int rowCountPerPage = tableViewHeight/rowHeight-1; //每页显示行数
int canNotViewCount = rowCount-rowCountPerPage; //看不见的行数
if(canNotViewCount == 0) return false;
int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
if(maxValue == 0) return false;
int pageValue = (maxValue*rowCountPerPage)/canNotViewCount;
p->verticalScrollBar()->setSliderPosition(pageValue*(pageNO-1));
return true;
}
bool PageTurn::pageUp(QTableWidget *p,bool isLoop)//上翻
{
if(p == NULL) return false;
int rowCount = p->model()->rowCount();
int rowHeight = p->rowHeight(0);
int tableViewHeight = p->height();
int rowCountPerPage = tableViewHeight/rowHeight-1; //每页显示行数
int canNotViewCount = rowCount-rowCountPerPage; //看不见的行数
if(canNotViewCount == 0) return false;
int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
if(maxValue == 0) return false;
int pageValue = (maxValue*rowCountPerPage)/canNotViewCount;
int nCurScroller = p->verticalScrollBar()->value(); //获得当前scroller值
if(nCurScroller>0)
p->verticalScrollBar()->setSliderPosition(nCurScroller-pageValue);
else
{
QMessageBox::question(NULL, QString::fromLocal8Bit("提示信息"), QString::fromLocal8Bit("已经到首页了!!!"), QMessageBox::Ok);
if(isLoop == TRUE)
p->verticalScrollBar()->setSliderPosition(maxValue);
}
return true;
}
bool PageTurn::pageDown(QTableWidget *p,bool isLoop)//下翻
{
if(p == NULL) return false;
int rowCount = p->model()->rowCount();
int rowHeight = p->rowHeight(0);
int tableViewHeight = p->height();
int rowCountPerPage = tableViewHeight/rowHeight-1; //每页显示行数
int canNotViewCount = rowCount-rowCountPerPage; //看不见的行数
if(canNotViewCount == 0)
return false;
int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
if(maxValue == 0)
return false;
int pageValue = (maxValue*rowCountPerPage)/canNotViewCount;
int nCurScroller = p->verticalScrollBar()->value(); //获得当前scroller值
if(nCurScroller<maxValue)
p->verticalScrollBar()->setSliderPosition(nCurScroller+pageValue);
else
{
QMessageBox::question(NULL, QString::fromLocal8Bit("提示信息"), QString::fromLocal8Bit("已经到末页了!!!"), QMessageBox::Ok);
if(isLoop == TRUE)
p->verticalScrollBar()->setSliderPosition(0);
}
return true;
}
bool PageTurn::pageHome(QTableWidget *p)//首页
{
if(p == NULL) return false;
int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
if(maxValue == 0) return false;
p->verticalScrollBar()->setSliderPosition(0);
return true;
}
bool PageTurn::pageEnd(QTableWidget *p)//末页
{
if(p == NULL) return false;
int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
if(maxValue == 0) return false;
p->verticalScrollBar()->setSliderPosition(maxValue);
return true;
}
感谢分享:https://blog.csdn.net/liuguangzhou123/article/details/8109089