В настоящее время я работаю над 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. Не могли бы вы помочь разрешить увеличение / уменьшение при нажатии и управлении колесом мыши? (Не прокручивайте полосу прокрутки)
Извините за мой плохой английский.
Глядя на вашу текущую реализацию здесь, вы не указали event-> accept (), если вы добавили свою собственную функциональность и не хотите распространять событие дальше на родителя. Попробуйте добавить event->accept()
в условиях if, где вы добавили свою логику.
И попробуйте добавить оператор отладки, чтобы проверить, достигает ли событие здесь или кто-то другой обрабатывает событие. Под кем-то еще я имею в виду другой дочерний виджет. Некоторое описание пользовательского интерфейса и виджета, который нужно увеличить, будет полезно для дальнейшего изучения проблемы.
Обязательно прочитайте о системе событий в Qt. Документы доступны Вот
На самом деле, есть дочерний виджет, который первым обрабатывает событие 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);
}
...
}