Я разработал gui в Qt Designer, который помимо прочего отображает виджет QTextEdit.Проблемы с обработкой события QTextEdit()
Мне нужно обработать пользователя, который вводит определенные комбинации клавиш (клавиша TAB, SHIFT + ВВОД и SHIFT + RETURN до сих пор) таким образом, что он не отображает эти символы в виджетах QTextEdit и реализует некоторые пользовательские функции ,
Я создал обработчик для обнаружения keyReleaseEvent с, но это, кажется, слишком поздно, чтобы предотвратить табуляции, возврата каретки и т.п. получение отображается, поэтому я попытался обработки keyPressEvent с, но это не кажется работать вообще. Из того, что я читал в Интернете, люди говорят, что keyPressEvent потребляется виджетами и поэтому никогда не распространяется до gui. Я не знаю достаточно о виджетах QTextEdit, чтобы сказать, правильно ли это, но пока я предполагаю, что это так.
Тогда я попробовал это в методе класса __init__
для графического интерфейса (я оставил чек на ключ RETURN, чтобы сохранить код коротким ниже:
self.textEdit.event = self.eventX
Вот код eventX метод:
def eventX(self, event): if event.type() == QEvent.KeyPress and event.key() == Qt.Key_Tab: print 'CODE WINDOW: Tab pressed' self.textEdit.insertPlainText(QString('| |')) self.textEdit.update() event.accept() return True elif event.type() == QEvent.KeyPress and (event.key() == Qt.Key_Enter) and event.modifiers() & Qt.ShiftModifier: print 'CODE WINDOW: Shift pressed with Enter' self.submitCode() self.textEdit.update() event.accept() return True else: event.ignore() return QWidget.event(self, event)
Это где все становится странно, выше код будет сортировать работы, если я указал, что:. verticalScrollBarPolicy = Qt.ScrollBarAsNeeded
для виджета QTextEdit, за исключением того, что он фактически не отображает символы в виджетах, но, похоже, он обрабатывает нажатые клавиши TAB и SHIFT-ENTER/SHIFT-RETURN?
И тогда, если я установил verticalScrollBarPolicy = Qt.ScrollBarAlwaysOn
, метод eventX, похоже, полностью игнорируется!
Это сбивает меня с ума на этом этапе. Кто-нибудь знает, что я делаю неправильно?
Спасибо.
UPDATE: На основе информации, полученной от MDURANT, теперь у меня есть код ниже, который работает для меня:
def handleEditorKeyPress(self, event): if event.key() == Qt.Key_Tab: # My custom code goes here. event.accept() return elif event.key() == Qt.Key_Enter and event.modifiers() & Qt.ShiftModifier: # My custom code goes here. event.accept() return elif event.key() == Qt.Key_Return and event.modifiers() & Qt.ShiftModifier: # My custom code goes here. event.accept() return else: event.ignore() return QTextEdit.keyPressEvent(self.textEdit, event)