You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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)

关键说明

  1. 通过event.reason()精准筛选Tab类操作触发的焦点事件,排除手动点击的情况
  2. 新增try-except块,避免上一个输入框内容无法转为整数导致的程序异常
  3. 最后返回super().eventFilter(...)而非固定False,确保事件能正常传递给后续处理逻辑

内容的提问来源于stack exchange,提问作者Fr33dan

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 12:02:33