• 6057阅读
  • 4回复

窗口滚动的问题 [复制链接]

上一主题 下一主题
离线herry
 
只看楼主 倒序阅读 楼主  发表于: 2010-08-10
— 本帖被 XChinux 执行加亮操作(2010-09-06) —
各位大虾,小弟有一问题,困惑多日,仍不能解。忘大家赐教

需求:实现类似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重新编辑 ]
离线denggang0828
只看该作者 1楼 发表于: 2010-08-12
滚动应该不会有问题
这是symbian系统自己定义好的

可能是你封装控件时出问题了
离线denggang0828
只看该作者 2楼 发表于: 2010-08-13
楼主 能发一下你的源码吗 我现在也想做一个好友列表的东西 
不胜感激
denggang0828@163.com
离线herry
只看该作者 3楼 发表于: 2010-08-17
代码已发
离线herry
只看该作者 4楼 发表于: 2010-08-17
我现在用QListWidget实现,问题是,我给每一个item都设置背景,当一个item获取焦点时,我希望更换它的背景达到提示的效果,问题是,现在一个item得到焦点后,它被另外一种颜色遮挡,根本看不到背景,我该怎么做?
快速回复
限100 字节
 
上一个 下一个