QT控件之Qtable Widget(5)——翻页功能

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

  • 4
    点赞
  • 65
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值