#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++;
}
}