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

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


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

如何为鼠标滚轮做同样的事情?
我不想从QSlider重新实现我的自定义Slider类。
我要求任何解决方法或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可以管理对象的许多行为,而无需对其进行子类化。

关于c++ - 在键盘箭头键上禁用QSlider的valueChanged,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53204898/

10-10 01:49