QGraphicsView - как отключить прокрутку мыши и клавиатуры

StackOverflow https://stackoverflow.com/questions/925934

  •  06-09-2019
  •  | 
  •  

Вопрос

В моем приложении у меня есть QGraphicsScene с добавлением pixmap, и все просматривается в QGraphicsView с отключенными полосами прокрутки.Окно программы меньше, чем pixmap, и когда я нажимаю клавиши со стрелками или перемещаю колесико мыши, pixmap перемещается.

Как мне отключить это, чтобы, даже если пиксельное изображение больше, чем window, оно не перемещалось с помощью клавиатуры или мыши, если я не использую для этого свои события?

(Я попытался присвоить интерактивному свойству значение false, но это не сработало)

Это было полезно?

Решение

Я считаю, что самым простым решением было бы установить FocusPolicy для QGraphicsView в значение NoFocus, а затем обработать все ключевые события в главном окне.

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

Другие советы

Я думаю, что самый простой способ - это использовать QGraphicsView::setSceneRect() чтобы задать область, которую разрешена визуализация вида.

Если вы установите видимость sceneRect() до фактического размера виджета просмотра (или просто немного меньше), тогда он не сможет прокручивать или перемещать за пределы этого прямоугольника.

Я не знаю, есть ли более простой способ, но умеренно простым способом было бы создать класс, который наследует ваш класс QGraphicsView и переопределяет события нажатия мыши и клавиши.

Более сложный способ предполагает установку фильтра событий в виджете.

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top