Есть несколько вопросов по поводу этого, все из которых, похоже, говорят, что единственный способ удалить пунктирную границу - чтобы установить focusPolicy на виджет/элемент, о котором идет речь, NoFocus. Хотя это работает как временное исправление, это препятствует дальнейшему взаимодействию с указанным виджетами/элементами в области других необходимых фокусов.
Указанная граница:
Вот пример того, почему это не работает.
- У меня есть всплывающее окно немодального виджета, подумайте о лайтбоксе для изображения.
- Я хочу обнаружить mousePressEvent за пределами виджета и закрыть виджет в результате. Чтобы сделать это, я должен поймать focusOutEvent.
- Однако, если подавляющее большинство виджетов в моей программе настроено как NoFocus (чтобы удалить проблему с границей), тогда я не могу поймать focusOutEvent, потому что, как вы догадались, у них нет политики фокуса.
Вот еще один пример:
- У меня есть QTreeWidget, который является подклассом, поэтому я могу поймать keyPressEvents по разным причинам.
- QTreeWidget также установлен как NoFocus для предотвращения границы. Из-за этого, однако, виджет никогда не имеет фокуса, и поэтому никакие keyPressEvents не могут быть пойманы.
- Обходной путь для этого (kludgy, imo) заключается в использовании класса widget grabKeyboard, что опасно, если я забуду освободитьKeyboard позже. Это не оптимально.
Итак, вопрос в том, есть ли способ удалить эту странную (в основном просто уродливую) пунктирную рамку, не отключая фокус для всего, что есть в моем приложении? Спасибо заранее!