如何在键盘箭头和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)
正在执行所需的操作...就像释放滑块后一样,在所需的应用程序中添加了值。
要求提供解决方法和示例。
答案 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可以管理对象的许多行为,而无需对其进行子类化。