Удаление пунктирной рамки без установки NoFocus в Windows PyQt

Есть несколько вопросов по этому поводу, все из которых, кажется, говорят, что единственный способ удалить пунктирную рамку — это установить focusPolicy для рассматриваемого виджета/элемента Без фокуса. Хотя это работает как временное исправление, это предотвращает дальнейшее взаимодействие с указанным виджетом/элементом в сфере других необходимых focusEvents.

Упомянутая граница:

Dotted Focus? Border

Вот пример того, почему это не работает.

  • У меня есть всплывающее окно немодального виджета, например, лайтбокс для изображения.
  • Я хочу обнаружить событие mousePressEvent вне виджета и в результате закрыть виджет. Для этого я должен поймать focusOutEvent.
  • Однако, если подавляющее большинство виджетов в моей программе установлено как NoFocus (чтобы устранить проблему с границей), то я не могу поймать focusOutEvent, потому что, как вы уже догадались, у них нет политики фокусировки.

Вот еще один пример:

  • У меня есть QTreeWidget, который является подклассом, поэтому я могу перехватывать события keyPressEvents по разным причинам.
  • QTreeWidget также установлен как NoFocus для предотвращения границы. Однако из-за этого виджет никогда не получает фокуса, и, следовательно, никакие события keyPressEvents не могут быть перехвачены.
  • Обходной путь для этого (kludgy, imo) состоит в том, чтобы использовать класс виджета grabKeyboard, что опасно, если я забуду releaseKeyboard позже. Это не оптимально.

Итак, вопрос в том, есть ли способ удалить эту странную (в основном просто уродливую) пунктирную рамку, не отключая фокус для всего в моем приложении? Заранее спасибо!

17
задан Community 23 May 2017 в 12:08
поделиться