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

启用日历弹窗的QDateEdit点击弹出日历时触发editingFinished信号问题

解决QDateEdit启用日历弹窗后editingFinished信号重复触发的问题

该异常触发是Qt的默认行为:点击下拉箭头唤起日历弹窗时,日期输入框会先失去焦点,触发第一次editingFinished信号;后续日历关闭、输入框再次失去焦点时会触发第二次信号。

你不需要修改原有信号绑定逻辑,只需要在槽函数中增加日历弹窗可见性判断,跳过唤起弹窗时的无效触发即可:

the_date = QDateEdit(...)
# 原有初始化逻辑不变
the_date.setCalendarPopup(True)
the_date.editingFinished.connect(checkDate)
...
def checkDate():
    # 日历弹窗可见时直接跳过本次触发
    if the_date.calendarWidget().isVisible():
        return
    # 原有业务逻辑不变
    print("checkDate called")

如果槽函数绑定了多个QDateEdit控件、或者无法直接拿到控件实例,可以用sender()方法获取触发信号的控件实例,适配性更强:

def checkDate():
    date_edit = sender()
    if date_edit.calendarWidget().isVisible():
        return
    print("checkDate called")

该方案不会像userDateChanged一样跟随每次字符输入触发,只会在用户完成日期编辑、控件真正失去焦点时执行业务逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 06:45:04