0

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

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

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

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

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

on_horizontalSlider_sliderReleased()
on_horizontalSlider_sliderPressed()

基于在这 2 个插槽中更新的布尔标志,

on_horizontalSlider_valueChanged(int)

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

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

4

1 回答 1

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

于 2018-11-08T12:01:22.700 回答