各位大虾,小弟有一问题,困惑多日,仍不能解。忘大家赐教
需求:实现类似qq好友列表的功能,
数据显示:每一个好友的显示是:左边一个
图标,右边2行数据,和qq好友列表一样。当好友很多,一屏显示不下时,需要可以滚动,并且显示滚动条,用户可以通过拖动滚动条来浏览好友列表,也可以通过用手滑动好友列表进行浏览(触摸屏)。
小弟现在自定义了一个控件用于每一个好友的显示,数据管理,然后将这些控件加载到QScrollArea里,通过它实现
窗口的滚动,现在是显示没问题,通过滚动条也可以实现平滑滚动,但是当用手滑动时,不能实现平滑滚动(即不能看见滑块的滚动痕迹),一下就滚动到目标位置,感官上不是很好。
下面是滚动的部分代码:
void MyScrollArea::mouseMoveEvent ( QMouseEvent * e )
{
if(!isNeedScroll)
return;
QTime time = QTime::currentTime();
int distance = e->pos().y() - lastPoint.y();
long millSecond = (time.second() - lastTime.second()) * 1000 + time.msec() - lastTime.msec();
if(millSecond != 0)
{
moveSpeed = distance / millSecond;
}
if(moveSpeed < 2)
{
moveSpeed = 3;
}
else if(moveSpeed < 4)
{
moveSpeed = 5;
}
else
{
moveSpeed = 7;
}
setScrollOffset(distance);
lastPoint.setY(e->pos().y());
lastTime = QTime::currentTime();
}
void MyScrollArea::setScrollOffset (int offset)
{
int curValue = verticalScrollBar()->value();
if(offset > 0)
{
for(int i = 0; i < steps; ++i)
{
verticalScrollBar()->setValue(--curValue);
}
}
else
{
for(int i = 0; i < steps; ++i)
{
verticalScrollBar()->setValue(++curValue);
}
}
}
按理来说,scrollbar的位置应该是一个像素一个像素变化,但是我的log显示,有时它会突然增加或减少39或40个像素,很奇怪。
不知是我的控件选择有问题还是我的滚动方法有问题;望各位大虾知道。
[ 此帖被XChinux在2010-09-06 23:13重新编辑 ]