Qt中如何检测Tab键触发的焦点切换以实现自动填充?
解决方案
要区分Tab键切换焦点和手动点击的情况,直接利用QFocusEvent的reason()方法即可,它能返回焦点变化的触发原因:
Qt.TabFocusReason:通过Tab键获得焦点Qt.BacktabFocusReason:通过Shift+Tab键获得焦点
修改你的事件过滤器代码如下:
def eventFilter(self, selected_input, event): if event.type() == QEvent.FocusIn: # 仅在Tab/Shift+Tab切换焦点时触发自动填充 if (event.reason() in (Qt.TabFocusReason, Qt.BacktabFocusReason) and self.previous_input is not None and selected_input.text() == ""): try: new_value = int(self.previous_input.text()) + 1 selected_input.setText(str(new_value)) except ValueError: # 处理上一个输入非数字的情况,避免程序崩溃 pass self.previous_input = selected_input return super().eventFilter(selected_input, event)
关键说明
- 通过
event.reason()精准筛选Tab类操作触发的焦点事件,排除手动点击的情况 - 新增
try-except块,避免上一个输入框内容无法转为整数导致的程序异常 - 最后返回
super().eventFilter(...)而非固定False,确保事件能正常传递给后续处理逻辑
内容的提问来源于stack exchange,提问作者Fr33dan
相关产品推荐
相关产品推荐

