Передача / пересылка событий подобъекту в Qt - PullRequest
4 голосов
/ 29 января 2010

Я работаю над приложением Qt, и у меня проблема с получением событий мыши там, где я их хочу.

Вот высокоуровневое представление о том, что у меня есть (на каждом уровне происходят другие вещи, которые диктуют необходимость представлений и сцен):

+----------------
| App Window       -- QMainWindow
| +--------------
| | View           -- QGraphicsView   --- Grabbing mouse events here for Mode 1
| | +------------
| | | Scene        -- QGraphicsScene
| | | +----------
| | | | Image      -- QGraphicsPixmap --- Want to grab mouse events here for Mode 2
| | | | 

В режиме 1 я получаю событие mousePressEvent на уровне View . В режиме 2 я бы хотел получать события мыши на уровне Image . До того, как я перегрузил mousePressEvent в классе View, я смог получить все события в Image . Теперь, когда я снимаю на Просмотр Я не могу получить события мыши в изображении. Изображение является приватным в Сцена , и я не хочу это раскрывать.

Здесь нет наследства; каждый элемент является объектом, созданным объектом над ним.

Читая этот вопрос Qt - передавать события нескольким объектам? создает впечатление, что я хочу захватить события мыши на уровне Image и позволить им вернуться обратно; однако мне все равно нужно создать mousePressEvent в View , и я вернусь туда, где я нахожусь.

Есть ли способ включить / выключить обработку событий во время выполнения и убедиться, что они достигают более низких уровней? Или есть способ перенаправить события на подобъект?

1 Ответ

5 голосов
/ 29 января 2010

Есть ли способ включить / выключить обработку событий во время выполнения и убедиться, что они достигают более низких уровней? Или есть способ перенаправить события на подобъект?

Есть несколько возможностей:

  1. Используйте QGraphicsScene :: sendEvent (...) для отправки события элементам. Так как scene () доступна из любых элементов по методу scene (). Может быть, это решение для вас.
  2. Для выполнения той же работы вы можете использовать статический метод QCoreApplication :: sendEvent (...).
  3. Фильтр событий может выполнять эту работу, см. Глава «События и фильтры событий» .
  4. Вы можете использовать определенную систему событий установки Frameworkview Framework ( QGraphicsItem :: sceneEventFilter (...) и installSceneEventFilter (...)

Во время выполнения можно отключить / включить событие мыши с помощью метода QGraphicsItem :: setAcceptedMouseButtons (...).

Есть много других возможностей ...

Надеюсь, это поможет!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...