首页| 论坛| 消息

标题:QLineEdit编辑完,鼠标点击到窗口其他空白地方,如何触发一个信号表示输入完成?
作者:royt
日期:2011-08-30 12:55
内容:

如题,我有一个Dialog,里面有个QLineEdit,需要对输入值做验证。希望在输入完成且焦点离开时验证,textChanged()信号是肯定不行的,还有个editingFinished()信号,当鼠标点击其他控件或者按tab键时会被发射。但是我希望当鼠标点击Dialog任何空白地方都能触发信号,而此时尽管焦点光标还在QLineEdit中闪动。请问该如何实现呢。

另外,当调用lineEdit->undo()这个函数,我发现它只能回退一次,比如说我现在lineEdit的text()是一个合法值100,我现在输入一个a,再输入一个b,此时验证发现输入不是个合法数字100ab,于是undo操作,但这时会变回100a而不是100。如果回退到最近一次获得焦点时的text() ?


#1 [royt 08-30 16:33]
关于第二个undo的问题,自己想了个办法,就是设置一个私有变量,每次LineEdit接受正确的值时,存储到这个变量里面,undo时把该变量的值录入控件。
第一个问题还是没办法,或许要截获鼠标事件,但怎么知道点中的是窗体的空白处呢?
#2 回 1楼(royt) 的帖子 [wxj120bw 08-30 23:34]
其实你的验证应该根据文本发生变化实时去验证 不应该根据输入完后来验证 这样你第二个问题应该不会存在 如果你想等输入完才验证 你可以用事件过滤 判断focusoutevent事件
#3 [royt 08-31 17:40]
可是focusoutevent不也是当焦点离开lineEdit时发生的吗,当鼠标点击窗口空白处,似乎焦点还在原处。
#4 [roywillow 08-31 18:34]
或许可以试试改周围其他组件的focusPolicy来使得line edit强制失去焦点?
#5 Re:回 1楼(royt) 的帖子 [jdwx 08-31 20:06]
引用第2楼wxj120bw于2011-08-30 23:34发表的 回 1楼(royt) 的帖子 :
其实你的验证应该根据文本发生变化实时去验证 不应该根据输入完后来验证 这样你第二个问题应该不会存在 如果你想等输入完才验证 你可以用事件过滤 判断focusoutevent事件
installEventFilter ( QObject * )

<< 1 2 >> (1/2)

回复 发表
主题 版块