加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

QLineEdit及类似控件无法正确发出editingFinished信号

发布时间:2020-12-14 04:28:47 所属栏目:百科 来源:网络整理
导读:QLineEdit结合正则表达式进行输入匹配的时候有可能看似无法正确发出editingFinished信号,导致相应的槽函数不被触发。 例如有下面这样的正则表达式: QRegExp dRx0_400_P1(“(400[.]{1,1}[0]{0,1})|([1-3]{0,1}[0-9]{1,2}[.]{1,1}[0-9]{0,1})”); 这是一个判

QLineEdit结合正则表达式进行输入匹配的时候有可能看似无法正确发出editingFinished信号,导致相应的槽函数不被触发。

例如有下面这样的正则表达式:

QRegExp dRx0_400_P1(“(400[.]{1,1}[0]{0,1})|([1-3]{0,1}[0-9]{1,2}[.]{1,1}[0-9]{0,1})”);

这是一个判断输入是否为0~400之间带有两位小数的数字的正则表达式。连接editingFinished信号和槽,会发现,当你输入类似“xx.x”之类数据时能够正确触发槽函数,但是输入类似为“xx”或“xx.”这样的数据后。即便光标离开了QLineEdit,也不会触发槽函数执行。

这是因为,输入的数据虽然看似”在0~400“之间,但是并没有包含小数点和小数部分,因此,虽然在允许输入范围内,但是并不与正则表达式匹配,正则表达式返回false。可以理解为:虽然光标离开了该QLineEdit,但是Qt认为与正则表达式不匹配,就意味着用户输入不完整,因此不输入编辑完毕(editingFinished)状态,所以不触发editingFinished信号。

若将正则表达式修改为:

QRegExp dRx0_400_P1(“(400)|(400[.]{1,2})|([1-3]{0,1})”);

则在输入“xx.x”、“xx”或“xx.”这样的数据后正则表达式都匹配,这种情况下,光标一旦离开QLineEdit,立刻发出editingFinished信号。

因此,editingFinished信号的触发条件并不是光标离开QLineEdit,而是输入的数据完整并且光标离开编辑区。也就是用户真正的完成了输入后才会触发该信号。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读