QScrollBar的一个应用

#define PAGE_LIST_COUNT 10  //一页能显示的个数
#define SC_STEP_LINE 1 //线步
#define SC_STEP_PAGE 9 //页步

//m_sbList 是滚动条
//m_listCount 是全部的Item个数,m_listCount>PAGE_LIST_COUNT的时候才需要创建滚动条
//m_firListIdx 显示在当前页第一个Item的序号  0<m_firListIdx<m_listCount

void NewsList::CreateScrollBar(int value)  //value:maxValue
{
 m_sbList = new QScrollBar(0, value, SC_STEP_LINE, SC_STEP_PAGE, 0, Qt::Vertical, this);
 m_sbList->setGeometry(QRect(220, 52, 20, 238));
 connect(m_sbList, SIGNAL(nextLine()), this, SLOT(refNextLine()));
 connect(m_sbList, SIGNAL(prevLine()), this, SLOT(refPrevLine()));
 connect(m_sbList, SIGNAL(nextPage()), this, SLOT(refNextPage()));
 connect(m_sbList, SIGNAL(prevPage()), this, SLOT(refPrevPage()));
 connect(m_sbList, SIGNAL(sliderPressed()), this, SLOT(listSliderPressed()));
 connect(m_sbList, SIGNAL(sliderMoved(int)), this, SLOT(listSliderMoved(int)));
 connect(m_sbList, SIGNAL(sliderReleased()), this, SLOT(listSliderReleased()));
}


void NewsList::refNextLine()
{
 if(m_firListIdx + PAGE_LIST_COUNT >= m_listCount)
  return;
 if(m_firListIdx + PAGE_LIST_COUNT + SC_STEP_LINE > m_listCount)
  m_firListIdx = m_listCount - PAGE_LIST_COUNT;
 else
  m_firListIdx = m_firListIdx + SC_STEP_LINE;
 RefreshTitList();
}

void NewsList::refPrevLine()
{
 if(m_firListIdx == 0)
  return;
 if(m_firListIdx - SC_STEP_LINE < 0)
  m_firListIdx = 0;
 else
  m_firListIdx = m_firListIdx - SC_STEP_LINE;
 RefreshTitList();
}

void NewsList::refNextPage()
{
 if(m_firListIdx  + PAGE_LIST_COUNT >= m_listCount)
  return;
 if(m_firListIdx + PAGE_LIST_COUNT + SC_STEP_PAGE > m_listCount)
  m_firListIdx = m_listCount - PAGE_LIST_COUNT;
 else
  m_firListIdx = m_firListIdx + SC_STEP_PAGE;
 RefreshTitList();
}

void NewsList::refPrevPage()
{
 if(m_firListIdx == 0)
  return;
 if(m_firListIdx - SC_STEP_PAGE < 0)
  m_firListIdx = 0;
 else
  m_firListIdx = m_firListIdx - SC_STEP_PAGE;
 RefreshTitList();
}

void NewsList::listSliderReleased()
{
 m_firListIdx = m_sbList->value();
 RefreshTitList();
}


void NewsList::RefreshTitList()
{
    int i, j;

    //先隐藏先前的Item内容
    for(i = 0; i < PAGE_LIST_COUNT; i++)
    {
        m_btnList[i]->hide();
    }

    if(m_listCount <= 0)
    {
        return;
    }
 
    //显示跳步或翻页后的Item内容
    j = m_firListIdx;
    for(i = 0; i < PAGE_LIST_COUNT; i++)
    {
        m_btnList[i]->setWndText( 0, 5, m_strTitList[j], QFont(tr("unifont"), 10, QFont::Normal, FALSE),

QColor( 255, 255, 255 ));
        m_btnList[i]->show();
 j++;
    } 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值