Обработать wheelEvent в QtGraphicsView

138
13 сентября 2019, 17:40

Хочу реализовать масштабирование в QtGraphicsView через колесико мыши. На данный момент делаю это через фильтр событий следующим способом:

bool MainWindow::eventFilter(QObject *target, QEvent *event)
{
    if (target == ui->graphicsView || event->type() == QEvent::Wheel) {
        QWheelEvent *wheelEvent = static_cast<QWheelEvent *>(event);
        int delta = wheelEvent->delta();
        double scalePlus = 1.2;
        double scaleMinus = 0.8;
        if(delta > 0){
            ui->graphicsView->scale(scalePlus, scalePlus);
            qDebug() << "delta = " << delta;
        } else {
             ui->graphicsView->scale(scaleMinus, scaleMinus);
            qDebug() << "delta = " << delta;
        }
        return true;
      }
    }
}

Работает это ровно до того, как появляется ScrollBar. После этого колесико мыши просто начинает перехватываться скрулбаром. Как это обойти? Можно и вариант с переопредлелением класса и функции.

Answer 1

Нужно было добавить фильтрацию событий вертикального скролла graphicsView через:

ui->graphicsView->verticalScrollBar()->installEventFilter(this)

А после в функции фильтра событий добавить в проверку скролл:

if ((target == ui->graphicsView || target == ui->graphicsView->verticalScrollBar()) && event->type() == QEvent::Wheel) {
READ ALSO
Как изменить позицию body в Box2D?

Как изменить позицию body в Box2D?

Мне нужно в один момент времени изменить позицию тела по заданным координатамТо есть летит тело и нужно его "телепортировать" на новую позицию

123
Как в Node.js использовать библиотеку С++?

Как в Node.js использовать библиотеку С++?

Есть (динамическая) библиотека C++ с таким содержимым:

162
Функция _gethe() [закрыт]

Функция _gethe() [закрыт]

Как используя функцию _getch() реализовать(задание с калькулятором из института): 1) вводим 1, потом 2, потом 3 и тд

136
Подключение к websocket C++

Подключение к websocket C++

Пытаюсь написать бота для GoodGame, для этого надо подключиться к websocketПытался сделать через boost::asio, но ничего не вышло

130