QT QTableView 翻页实现

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了QT QTableView 翻页实现相关的知识,希望对你有一定的参考价值。

参考技术A  主要使用QTableView( QTableWidget)中的三个函数:

QTableView::verticalScrollBar()->setSliderPosition();  //设置当前滑动条的位置

QTableView::verticalScrollBar()->maximum();             //滑动条能移动的最大位置

QTableView::verticalScrollBar()->value();                   //获得当前滑动条的位置

#include<QScrollBar>//滑动条

#include<QTableView>

int Widget::pageCount(QTableView *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;



void Widget::pageTo(QTableView *p, int pageNO)//翻到指定页



    if(p == NULL)  return ;

    int maxPage = pageCount(p);

    if(pageNO > maxPage)  return ;

    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 ;

    int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值

    if(maxValue == 0) return ;

    int pageValue = (maxValue*rowCountPerPage)/canNotViewCount;

    p->verticalScrollBar()->setSliderPosition(pageValue*(pageNO-1));



void Widget::pageUp(QTableView *p)//上翻



    if(p == NULL)  return ;

    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 ;

    int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值

    if(maxValue == 0) return ;

    int pageValue = (maxValue*rowCountPerPage)/canNotViewCount;

    int nCurScroller = p->verticalScrollBar()->value(); //获得当前scroller值

    if(nCurScroller>0)

        p->verticalScrollBar()->setSliderPosition(nCurScroller-pageValue);

    else

   

      // if(isLoop == TRUE)

            p->verticalScrollBar()->setSliderPosition(maxValue);

   



void Widget::pageDown(QTableView *p)//下翻



    if(p == NULL)  return ;

    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 ;

    int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值

    if(maxValue == 0)

        return ;

    int pageValue = (maxValue*rowCountPerPage)/canNotViewCount;

    int nCurScroller = p->verticalScrollBar()->value(); //获得当前scroller值

    if(nCurScroller

        p->verticalScrollBar()->setSliderPosition(nCurScroller+pageValue);

    else

   

      //  if(isLoop == TRUE)

            p->verticalScrollBar()->setSliderPosition(0);

   



void Widget::pageHome(QTableView *p)//首页



    if(p == NULL)  return ;

    int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值

    if(maxValue == 0)  return ;

    p->verticalScrollBar()->setSliderPosition(0);



void Widget::pageEnd(QTableView *p)//末页



    if(p == NULL)  return ;

    int maxValue = p->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值

    if(maxValue == 0)  return ;

    p->verticalScrollBar()->setSliderPosition(maxValue);



EDD:

    在QT UI 界面实现设置相应的按钮点击实现就可。

QTableView和QTableWidget翻页功能实现-阿里云开发者社区

https://blog.csdn.net/liuguangzhou123/article/details/8109089

QTableView和QTableWidget翻页功能实现

本文转载自:http://blog.chinaunix.net/uid-25520556-id-2211406.html

主要使用QTableView和QTableWidget中的三个函数实现

QTableView::verticalScrollBar()->setSliderPosition();  //设置当前滑动条的位置

QTableView::verticalScrollBar()->maximum();             //滑动条能移动的最大位置

QTableView::verticalScrollBar()->value();               //获得当前滑动条的位置

实现代码如下:

static int nCurScroller=0; //翻页时的当时滑动条位置
static int pageValue = 10; // 一页显示条数

/***下一页***/
void SplayHisForm::nextPageHis()
{
    int maxValue = ui.TableWidget->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
    nCurScroller = ui.TableWidget->verticalScrollBar()->value(); //获得当前scroller值

    if(nCurScroller<maxValue)
        ui.TableWidget->verticalScrollBar()->setSliderPosition(pageValue+nCurScroller);
    else
        ui.TableWidget->verticalScrollBar()->setSliderPosition(0);
}

/***上一页***/
void SplayHisForm::prePageHis()
{
    int maxValue = ui.TableWidget->verticalScrollBar()->maximum(); // 当前SCROLLER最大显示值
    nCurScroller = ui.TableWidget->verticalScrollBar()->value();

    if(nCurScroller>0)
        ui.TableWidget->verticalScrollBar()->setSliderPosition(nCurScroller-pageValue);
    else
        ui.TableWidget->verticalScrollBar()->setSliderPosition(maxValue);
}

效果如下:

 

 

以上是关于QT QTableView 翻页实现的主要内容,如果未能解决你的问题,请参考以下文章

QTableView和QTableWidget翻页功能实现

QT QTableView(基于QStandardItemModel用法)操作详解

QT QTableView(基于QStandardItemModel用法)操作详解

QT QTableView(基于QStandardItemModel用法)操作详解

QTableView - 使用布局获得正确的大小[重复]

QTableWidget和 QTableView翻页效果(准确计算Scroll,然后使用setSliderPosition函数)