Qt: Обнаружение mousePressEvent вне определенного QWidget - PullRequest
2 голосов
/ 18 ноября 2011

У меня есть виджет, содержащий несколько дочерних объектов, которые пользователь может выбрать, щелкнув по ним.

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

Некоторые ограничения:

  • На самом деле невозможно съесть mousePressEvents окружающих объектов через eventFilter.
  • Если я могу избежать использования grabMouse(), я бы хотел, потому что это предупреждение из документов :

    Предупреждение: Ошибки в приложениях для захвата мышиочень часто блокируют терминал.Используйте эту функцию с особой осторожностью и рассмотрите возможность использования параметра командной строки -nograb во время отладки.

Означает ли это, что у меня есть другие параметры?

Примечание. Это приложение будет развернуто кроссплатформенно (как минимум, в Windows и Ubuntu)

Ответы [ 3 ]

5 голосов
/ 18 ноября 2011

Я был бы склонен просто проверить, теряет ли ваш виджет фокус, используя QWidget's focusOutEvent

2 голосов
/ 18 ноября 2011

Сигнал QApplication::focusChanged испускается, когда фокусный виджет изменяется. Вы можете проверить, находится ли недавно сфокусированный виджет в вашем наборе виджетов, а затем отменить выбор, основываясь на этом.

Вы можете получить текущий фокусированный виджет с помощью QApplication::focusWidget.

0 голосов
/ 20 ноября 2011

mousePressEvent()

Реализация по умолчанию реализует закрытие всплывающих виджетов при щелчке за пределами окна.

Это, вероятно, то, чтоВы имели в виду?

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