查看完整版本: [-- QSlider中怎么设置让鼠标一点就让滚动块马上定位到鼠标点击的地方? --]

QTCN开发网 -> Qt基础编程 -> QSlider中怎么设置让鼠标一点就让滚动块马上定位到鼠标点击的地方? [打印本页] 登录 -> 注册 -> 回复主题 -> 发表主题

tenggaolong 2008-01-08 11:56

QSlider中怎么设置让鼠标一点就让滚动块马上定位到鼠标点击的地方?

QSlider中怎么设置让鼠标一点就让滚动块马上定位到鼠标点击的地方?

tenggaolong 2008-01-11 21:41
已经放了快一个星期了.没人会吗?我已经算出了根据像素而得到slider的value...并把它打印出来...用一个小小测试程序.
MySlider::MySlider(Qt::Orientation orientation, QWidget * parent)
    : QSlider(Qt::Horizontal, parent)
{
    setRange(0,200);
}   

void MySlider::mouseReleaseEvent(QMouseEvent *event)
{
    setRange(0, width());
    setValue(event->x());
}

这样可以点到位置..但我的程序要求是mousePressEvent...改成mousePressEvent后..就可以发现..点击是可以....但不是真正解决问题的方法..往左边点和往右边滚动块显示的位置不对...最大化后再点击会发现更严重的问题...我看了src/widgets/qslider.cpp里面的源码..发现mousePressEvent是有算滚动块与点击地方差值...所以..重载后就不能用了...但..我要的效果就是我们用的千千静听..或者是foobar或者wmp这些播放器的滚动条...一点击就到位...望高人指教!!

landuochong 2008-01-14 13:44
mousePressEvent.是针对滑块的,改成mousePressEvent就必须重新实现mousePressEvent槽,设法获得鼠标在slider上的位置,然后setValue(int)就可以了

landuochong 2008-02-15 15:18
已解决。我把它传到个人作品展示中把

guyansrg 2008-02-15 15:57
呵呵,参考参考 [s:1]

allright 2009-01-05 15:56
请问楼主,究竟怎么实现啊~能给我参考参考嘛?

wd007 2009-01-08 23:12
呵呵,学习一下,感谢

long5337 2009-01-18 12:01
学习学习!!

syilong2006 2009-05-11 15:33
老大把您的作品给发给我看看嘛!
e_mail:syilong@126.com

jiaoxing3 2010-11-26 16:14
可以使用事件过滤,代码如下
switch(event->type())
{      
case QEvent::MouseButtonPress:
            {
                if(((QMouseEvent *)event)->button() == Qt::LeftButton)
                {
                    int max = ((QSlider*)obj)->maximum();
                    int min = ((QSlider*)obj)->minimum();
                    int pointPos = ((double)((QMouseEvent *)event)->x()) / ((QSlider*)obj)->width()*(max - min)+min;
                    if(abs(pointPos - ((QSlider*)obj)->value())> (((QSlider*)obj)->pageStep()) )
                    {
                        ((QSlider*)obj)->setValue(pointPos);
                        return true;
                    }
                    else
                    {
                        return false;
                    }
                }
                else
                    return false;
           }
}
这样,在滑块与鼠标距离很近时(小于pageStep),return false使用QSlider默认的点击处理,距离比较大时(大于pageStep),自己手动处理,避免了很近时点击乱动的现象

gintonic 2017-05-14 14:51
jiaoxing3:可以使用事件过滤,代码如下
switch(event->type())
{      
case QEvent::MouseButtonPress:
            {
....... (2010-11-26 16:14) 

你好,你这个代码在水平slider里可以用,在垂直的slider里就用不了了,我把代码中的x改成y,width改成height也还是不成功,你知道应该怎么改么


查看完整版本: [-- QSlider中怎么设置让鼠标一点就让滚动块马上定位到鼠标点击的地方? --] [-- top --]



Powered by phpwind v8.7 Code ©2003-2011 phpwind
Gzip disabled