Есть несколько вопросов по этому поводу, все из которых, кажется, говорят, что единственный способ удалить пунктирную рамку — это установить focusPolicy для рассматриваемого виджета/элемента Без фокуса. Хотя это работает как временное исправление, это предотвращает дальнейшее взаимодействие с указанным виджетом/элементом в сфере других необходимых focusEvents.
Упомянутая граница:
Вот пример того, почему это не работает.
- У меня есть всплывающее окно немодального виджета, например, лайтбокс для изображения.
- Я хочу обнаружить событие mousePressEvent вне виджета и в результате закрыть виджет. Для этого я должен поймать focusOutEvent.
- Однако, если подавляющее большинство виджетов в моей программе установлено как NoFocus (чтобы устранить проблему с границей), то я не могу поймать focusOutEvent, потому что, как вы уже догадались, у них нет политики фокусировки.
Вот еще один пример:
- У меня есть QTreeWidget, который является подклассом, поэтому я могу перехватывать события keyPressEvents по разным причинам.
- QTreeWidget также установлен как NoFocus для предотвращения границы. Однако из-за этого виджет никогда не получает фокуса, и, следовательно, никакие события keyPressEvents не могут быть перехвачены.
- Обходной путь для этого (kludgy, imo) состоит в том, чтобы использовать класс виджета grabKeyboard, что опасно, если я забуду releaseKeyboard позже. Это не оптимально.
Итак, вопрос в том, есть ли способ удалить эту странную (в основном просто уродливую) пунктирную рамку, не отключая фокус для всего в моем приложении? Заранее спасибо!
задан Community 23 May 2017 в 12:08
поделиться