Я нашел решение, которое, кажется, работает, хотя я все еще открыт для других вариантов, если они есть.Я использую PyQt4, поэтому мой пример на python:
Создайте подкласс QLineEdit, чтобы у меня был новый тип.Я не хочу или не нуждаюсь в этом поведении во всех экземплярах QLineEdit;только эти конкретные.
class MyLineEdit(QtGui.QLineEdit):
pass
Теперь, в моем подклассе QMainWindow, я переопределяю реализацию mousePressEvent()
.Получает текущий фокусированный виджет.Если этот виджет имеет тип MyLineEdit
, очистите фокус.
class MyMainWindow(QtGui.QMainWindow):
def ...
def mousePressEvent(self, event):
focused_widget = QtGui.QApplication.focusWidget()
if isinstance(focused_widget, MyLineEdit):
focused_widget.clearFocus()
QtGui.QMainWindow.mousePressEvent(self, event)
def ...
Это заставляет меня искать нужное мне поведение, поэтому, если пользователь щелкает в любом месте окна приложения, фокус очищается.
Редактировать: я нашел одно предупреждение для этого.У меня есть QTreeView
в главном окне.Если пользователь щелкает по дереву, фокус не удаляется из поля редактирования текста.