QTableView表格翻页,Qt翻页基类的封装

简单粗暴,老规矩
#include “CTableviewpageswitch.h”

#ifndef CTABLEVIEWPAGESWITCH_H
#define CTABLEVIEWPAGESWITCH_H

#include <QtWidgets/QWidget>
#include <QtWidgets/QTableView>
#include <QtWidgets/QScrollBar>
#include <QEvent>
#include "cbasebutton.h"
#include "cbaselable.h"
#include "cbaselineedit.h"

class CTableViewPageSwitch : public QWidget
{
    Q_OBJECT
public:
    explicit CTableViewPageSwitch(QTableView *TableView,QWidget *parent = 0);
    void initpages();// 初始化翻页信息

private:

    QTableView *m_TableView;
//    CBaseLable * T_pageTo; // 转到 页数
//    CBaseLineEdit * L_pageTo;// 输入页数Edit
//    CBaseButton * B_pageTo;// Go按钮

    CBaseLable * T_pageTip;// 页数提示

    CBaseButton * pageup;// 上一页
    CBaseButton * pagedown;// 下一页
    int allpage; // 总页数
    int curpage; // 当前页数


private:
    int pageCount();//QTableView 总页数

signals:
    
private slots:
//        bool pageTo();//翻到指定页
        bool pageUp();//上翻
        bool pageDown();//下翻
    
};

#endif // CTABLEVIEWPAGESWITCH_H

#include “CTableviewpageswitch.cpp”

#include "CTableviewpageswitch.h"

CTableViewPageSwitch::CTableViewPageSwitch(QTableView *TableView, QWidget *parent) :
    QWidget(parent),
    m_TableView(TableView),
    curpage(1)
{
    setFixedSize(1000,80);
     allpage = pageCount();
//    setStyleSheet("bac");(BG_TicketRecharge,30,40,160,50,"票卡信息",40,QFont::Bold,"color:#000000");
//    T_pageTo = new CBaseLable(this,230,20,200,30,"转到       页",16,QFont::Bold;color:#333333");
//    L_pageTo = new CBaseLineEdit(315,20,40,30,this);
//    L_pageTo->setStyleSheet("font:bold 20px;color:#333333;background-color:#ffffff;border:1px;border-style:solid;border-color:#4668cb;border-radius:4px;");
    L_pageTo->setTextMargins(10 , 1 , 1 , 1);
//    L_pageTo->setAlignment(Qt::AlignCenter);
//    connect(L_pageTo,SIGNAL(returnPressed()),this,SLOT(pageTo()));

//    B_pageTo = new CBaseButton(this,410,20,60,30,"Go","","background-color:#1a76d2;border-radius:4px;font:18px;color:#ffffff");
//    connect(B_pageTo,SIGNAL(clicked()),this,SLOT(pageTo()));


    T_pageTip = new CBaseLable(this,150,10,300,40,"[当前1/1页]",24,QFont::Normal,"color:#333333");

    T_pageTip->setText(QString("[当前%1/%2页]").arg(curpage).arg(allpage));

    pageup = new CBaseButton(this,T_pageTip->x()+T_pageTip->width()+40,0,130,60,"上一页",24,QFont::Normal,"","background-color:#6156ed;border-radius:12px;color:#ffffff");
    connect(pageup,SIGNAL(clicked()),this,SLOT(pageUp()));

    pagedown = new CBaseButton(this,T_pageTip->x()+T_pageTip->width()*2,0,130,60,"下一页",24,QFont::Normal,"","background-color:#6156ed;border-radius:12px;color:#ffffff");
    connect(pagedown,SIGNAL(clicked()),this,SLOT(pageDown()));
}

void CTableViewPageSwitch::initpages()
{
    m_TableView->verticalScrollBar()->setSliderPosition(0);
//    L_pageTo->clear();
    curpage = 1;
    allpage = pageCount();
    T_pageTip->setText(QString("[当前%1/%2页]").arg(curpage).arg(allpage));

}

int CTableViewPageSwitch::pageCount()
{
    if(m_TableView == NULL)
        return -1;
    int rowCount = m_TableView->model()->rowCount();
    int rowHeight = m_TableView->rowHeight(0);
    int tableViewHeight = m_TableView->height();
    int rowCountPerPage = tableViewHeight / rowHeight - 1;//每页显示行数
    int ret = rowCount / rowCountPerPage;
    int tem = rowCount % rowCountPerPage;
    if (tem != 0)
        ret++;
    return ret;
}

//bool CTableViewPageSwitch::pageTo()
//{
//    if(L_pageTo->text() == NULL || L_pageTo->text().toInt() == 0)
//        return false;

//    if(m_TableView == NULL)
//        return false;

//    int maxPage = pageCount();

//    if(L_pageTo->text().toInt() > maxPage)
//        return false;
//    int rowCount = m_TableView->model()->rowCount();
//    int rowHeight = m_TableView->rowHeight(0);
//    int tableViewHeight = m_TableView->height();
//    int rowCountPerPage = tableViewHeight / rowHeight - 1;		//每页显示行数
//    int canNotViewCount = rowCount - rowCountPerPage;			//看不见的行数
//    if(canNotViewCount == 0)
//        return false;
//    int maxValue = m_TableView->verticalScrollBar()->maximum();		// 当前SCROLLER最大显示值
//    if(maxValue == 0)
//        return false;
//    int pageValue = (maxValue*rowCountPerPage) / canNotViewCount;
//    m_TableView->verticalScrollBar()->setSliderPosition(pageValue*(L_pageTo->text().toInt() - 1));
//    T_pageTip->setText(QString("[当前%1/%2页]").arg(L_pageTo->text().toInt()).arg(allpage));
//    curpage = L_pageTo->text().toInt();
//    return true;
//}

bool CTableViewPageSwitch::pageUp()
{
//    L_pageTo->clear();
    if(m_TableView == NULL)
        return false;
    int rowCount = m_TableView->model()->rowCount();
    int rowHeight = m_TableView->rowHeight(0);
    int tableViewHeight = m_TableView->height();
    int rowCountPerPage = tableViewHeight / rowHeight - 1;		//每页显示行数
    int canNotViewCount = rowCount - rowCountPerPage;			//看不见的行数
    if(canNotViewCount == 0)
        return false;
    int maxValue = m_TableView->verticalScrollBar()->maximum();		// 当前SCROLLER最大显示值
    if(maxValue == 0)
        return false;
    int pageValue = (maxValue*rowCountPerPage) / canNotViewCount;
    int nCurScroller = m_TableView->verticalScrollBar()->value();		//获得当前scroller值
    if(nCurScroller>0)
    {
        m_TableView->verticalScrollBar()->setSliderPosition(nCurScroller - pageValue);
        curpage--;
    }

    else
    {
            curpage = allpage;
            m_TableView->verticalScrollBar()->setSliderPosition(maxValue);
    }
    T_pageTip->setText(QString("[当前%1/%2页]").arg(curpage).arg(allpage));
    return true;
}

bool CTableViewPageSwitch::pageDown()
{
//    L_pageTo->clear();
    if(m_TableView == NULL)
        return false;
    int rowCount = m_TableView->model()->rowCount();
    int rowHeight = m_TableView->rowHeight(0);
    int tableViewHeight = m_TableView->height();
    int rowCountPerPage = tableViewHeight / rowHeight - 1;		//每页显示行数
    int canNotViewCount = rowCount - rowCountPerPage;			//看不见的行数

    if(canNotViewCount == 0)
        return false;
    int maxValue = m_TableView->verticalScrollBar()->maximum();		// 当前SCROLLER最大显示值
    if(maxValue == 0)
        return false;
    int pageValue = (maxValue * rowCountPerPage) / canNotViewCount;
    int nCurScroller = m_TableView->verticalScrollBar()->value();		//获得当前scroller值
    if(nCurScroller<maxValue)
    {
        m_TableView->verticalScrollBar()->setSliderPosition(nCurScroller + pageValue);
        curpage++;
    }
    else
    {
            curpage = 1;
            m_TableView->verticalScrollBar()->setSliderPosition(0);
    }
    T_pageTip->setText(QString("[当前%1/%2页]").arg(curpage).arg(allpage));
    return true;
}




使用:

    TableView = new QTableView(BG_TicketTable);
    TableView->setGeometry(QRect(30,180,1008,370));//设置Table的大小14,30,1140,505

    connect(TableView,SIGNAL(clicked(QModelIndex)),this,SLOT(Slot_CodeTicketViewRowClicked(QModelIndex)));

    tableViewPageSwitch = new CTableViewPageSwitch(TableView,BG_TicketTable);
    tableViewPageSwitch->setGeometry(0,610,1000,80);

完结,撒花~

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值