Как отключить функцию прокрутки при нажатии Ctrl в QMainWindow

В настоящее время я работаю над QT для моего проекта. Я реализовал класс MainWindow, который унаследован от QMainWindow.

В MainWindow я обрабатывал событие колеса мыши так:

void MainWindow::wheelEvent ( QWheelEvent * event )
{
if (event->modifiers().testFlag(Qt::ControlModifier)) {
if (event->delta() > 0) {
zoomInAct();
}
else if(event->delta()<0){
zoomOutAct();
}
}
}

Проблема в том, что когда я нажимаю КНОПКУ УПРАВЛЕНИЯ и прокручиваю мышь, полоса прокрутки всегда прокручивается вверх или вниз, прежде чем дойдет до функции wheelEvent. Не могли бы вы помочь разрешить увеличение / уменьшение при нажатии и управлении колесом мыши? (Не прокручивайте полосу прокрутки)

Извините за мой плохой английский.

1

Решение

Глядя на вашу текущую реализацию здесь, вы не указали event-> accept (), если вы добавили свою собственную функциональность и не хотите распространять событие дальше на родителя. Попробуйте добавить event->accept() в условиях if, где вы добавили свою логику.

И попробуйте добавить оператор отладки, чтобы проверить, достигает ли событие здесь или кто-то другой обрабатывает событие. Под кем-то еще я имею в виду другой дочерний виджет. Некоторое описание пользовательского интерфейса и виджета, который нужно увеличить, будет полезно для дальнейшего изучения проблемы.

Обязательно прочитайте о системе событий в Qt. Документы доступны Вот

1

Другие решения

На самом деле, есть дочерний виджет, который первым обрабатывает событие wheel (по умолчанию для него используется полоса прокрутки).

Решение: переопределите wheelevent в дочернем виджете, чтобы отправить его родительскому виджету (MainWindow) при нажатии клавиши управления.

class WorkArea: public QWidget {
...
virtual void wheelEvent(QWheelEvent *event)
{
if(event->modifiers().testFlag(Qt::ControlModifier))
MainWindow::wheelEvent(event);
else
QWidget::wheelEvent(event);
}
...
}
2

По вопросам рекламы [email protected]