如何在键盘箭头和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/