在键盘箭头键上禁用QSlider的valueChanged

时间:2018-11-08 09:32:15

标签: c++ qt keyboard mousewheel qslider

如何在键盘箭头和mouseWheel滚动上禁用QSlider的发射SIGNAL valueChanged。通过设置

    ui->horizontalSlider->setFocusPolicy(Qt::NoFocus);

键盘上的箭头键不发出信号。

如何对鼠标滚轮进行同样的操作? 我不想从QSlider重新实现我的自定义Slider类。 我要求任何解决方法或api,以便我可以禁用响应qslider的键盘和鼠标滚轮滚动。

主要目的是避免在每个valueChange上发送信号。所以我实现了以下内容,并且工作正常

on_horizontalSlider_sliderReleased()
on_horizontalSlider_sliderPressed()

基于在这2个广告位中更新的布尔标志,

on_horizontalSlider_valueChanged(int)

正在执行所需的操作...就像释放滑块后一样,在所需的应用程序中添加了值。

要求提供解决方法和示例。

1 个答案:

答案 0 :(得分:3)

class CBlockWheelEV: public QObject
{
    Q_OBJECT
public:
    CBlockWheelEV( QObject* parent ): QObject( parent ) {}
    bool eventFilter(QObject * pObject, QEvent * pEvent) override
    {
        if ( pEvent->type() == QEvent::Wheel )
        {
            qDebug() << pObject << pEvent;
            return true; // if return false - Scroll was unlocking
        }
        return false;
    }
};

...
ui->sldTest->installEventFilter( new CBlockWheelEV( ui->sldTest ) );
...

您可以使用EventFilter阻止通过旋转轮子从QSlider发出ValueChanged信号。但是,如果您想要一些特殊的行为-您需要在EventFilter中控制其他选项。 EventFilter可以管理对象的许多行为,而无需对其进行子类化。