Отключить значение QSliderChanged на клавишах со стрелками на клавиатуре - PullRequest
0 голосов
/ 08 ноября 2018

Как я могу отключить излучающее значение SIGNAL QSliderChanged на стрелках клавиатуры и колесико прокрутки мыши. Установив

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

Клавиши со стрелками Клавиши не излучают сигналы.

Как я могу сделать то же самое для прокрутки колесика мыши? Я не хочу переопределять свой собственный класс Slider из QSlider. Прошу любой работы вокруг или API, чтобы я мог отключить прокрутку клавиатуры и колеса мыши, отвечая на qslider.

Основное намерение состоит в том, чтобы избежать посылки сигналов на каждое значение Change. Итак, я реализовал следующее, и он работает нормально

on_horizontalSlider_sliderReleased()
on_horizontalSlider_sliderPressed()

на основе флага bool, обновленного в этих 2 слотах,

on_horizontalSlider_valueChanged(int)

выполняет требуемую операцию ... как после отпускания ползунка, значение добавляется в требуемое приложение.

Просьба предоставить подходы, примеры для обхода.

1 Ответ

0 голосов
/ 08 ноября 2018
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, чтобы блокировать испускание сигналов ValueChanged от QSlider при вращении колеса. Но если вам нужно какое-то особое поведение - вам нужно контролировать дополнительные опции в вашем EventFilter. EventFilter может управлять многими действиями объекта без его подкласса.

...