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

Disable QSlider's valueChanged on keyboard arrow keys

如何禁用 QSlider 在键盘箭头和鼠标滚轮滚动时发出的 SIGNAL valueChanged。通过设置

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

键盘方向键没有发出信号。

我怎样才能对鼠标滚轮滚动做同样的事情? 我不想从 QSlider 重新实现我的自定义 Slider class。 我要求任何解决方法或 api,以便我可以禁用响应 qslider 的键盘和鼠标滚轮滚动。

主要目的是避免在每次 valueChange 时发送信号。所以我已经实施了以下并且工作正常

on_horizontalSlider_sliderReleased()
on_horizontalSlider_sliderPressed()

基于在这 2 个槽中更新的 bool 标志,

on_horizontalSlider_valueChanged(int)

正在执行所需的操作...例如在释放滑块后,正在将值添加到所需的应用程序中。

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

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 可以管理对象的许多行为而无需对其进行子类化。