QSlider mouse direct jump

后端 未结 12 1800
爱一瞬间的悲伤
爱一瞬间的悲伤 2020-12-23 16:27

Instead of stepping when the user clicks somewhere on the qslider I want to make the slider jump to that position. How can this be implemented ?

12条回答
  •  滥情空心
    2020-12-23 17:17

    I also met this problem. My solution is shown below.

    slider->installEventFilter(this);
    ---    
    bool MyDialog::eventFilter(QObject *object, QEvent *event)
        {
            if (object == slider && slider->isEnabled())
            {
                if (event->type() == QEvent::MouseButtonPress)
                {
                    auto mevent = static_cast(event);
                    qreal value = slider->minimum() + (slider->maximum() - slider->minimum()) * mevent->localPos().x() / slider->width();
                    if (mevent->button() == Qt::LeftButton)
                    {
                        slider->setValue(qRound(value));
                    }
                    event->accept();
                    return true;
                }
                if (event->type() == QEvent::MouseMove)
                {
                    auto mevent = static_cast(event);
                    qreal value = slider->minimum() + (slider->maximum() - slider->minimum()) * mevent->localPos().x() / slider->width();
                    if (mevent->buttons() & Qt::LeftButton)
                    {
                        slider->setValue(qRound(value));
                    }
                    event->accept();
                    return true;
                }
                if (event->type() == QEvent::MouseButtonDblClick)
                {
                    event->accept();
                    return true;
                }
            }
            return QDialog::eventFilter(object, event);
        }
    

    You can also override these event handlers of QSlider.

    • QSlider::mousePressedEvent
    • QSlider::mouseMoveEvent
    • QSlider::mouseDoubleClickEvent

提交回复
热议问题