QTableWidget和 QTableView翻頁效果(准確計算Scroll,然后使用setSliderPosition函數)


以QTableView舉例,QTableWidget使用相同
 
int CQTTableViewPageSwitch::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;
}
 
        
BOOL CQTTableViewPageSwitch::pageTo(QTableView *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));
 
        
}
 
        
BOOL CQTTableViewPageSwitch::pageUp(QTableView *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
    {
        if(isLoop == TRUE)
            p->verticalScrollBar()->setSliderPosition(maxValue);
    }
}
 
        
BOOL CQTTableViewPageSwitch::pageDown(QTableView *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
    {
        if(isLoop == TRUE)
            p->verticalScrollBar()->setSliderPosition(0);
    }
}
 
        
BOOL CQTTableViewPageSwitch::pageHome(QTableView *p)//首頁
{
    if(p == NULL)  return false;
 
        
    int maxValue = p->verticalScrollBar()->maximum(); // 當前SCROLLER最大顯示值
    if(maxValue == 0)  return false;
    p->verticalScrollBar()->setSliderPosition(0);
}
 
        
BOOL CQTTableViewPageSwitch::pageEnd(QTableView *p)//末頁
{
    if(p == NULL)  return false;
 
        
    int maxValue = p->verticalScrollBar()->maximum(); // 當前SCROLLER最大顯示值
    if(maxValue == 0)  return false;
    p->verticalScrollBar()->setSliderPosition(maxValue);
}

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM