Добрый день! На форме создан вертикальный слайдер, tracking выключен. В таком случае при изменении положения слайдера мышью испускается сигнал sliderMoved(), а при отпускании клавиши мыши valueChanged(), что позволяет реализовать "пред просмотр" при slider moved и само действие при value changed. Однако есть проблема если изменять положение слайдера при помощи клавиатуры испускается только value changed, при этом не имеет значение удерживаю я клавишу или нажимаю много раз, что, в моем понимании, расходится с логикой управления мышью.
Я решил реализовать фильтрацию событий и исправить положение вещей и изменять значение только когда пользователь отпустит клавишу, в остальных случаях изменять положение.
| Код | bool CSliderEventFilter::eventFilter(QObject *obj, QEvent *evt) { QSlider* slider = dynamic_cast<QSlider*>(obj); if ( slider == nullptr ) return false;
QKeyEvent* keyEvt = dynamic_cast<QKeyEvent*>(evt); if ( keyEvt == nullptr ) return false;
switch (keyEvt->type()) { case QKeyEvent::KeyPress: qDebug() << "move slider"; break;
case QKeyEvent::KeyRelease: qDebug() << "change value"; break;
default: break; }
return true; }
|
При такой реализации я получаю оба события press и release даже если удерживаю клавишу, что поставило меня в тупик. Подскажите в какую сторону копать чтобы приручить слайдер? |