找回密码
 立即注册
收起左侧

关于限制QLineEdit的输入范围

5
回复
11707
查看
[复制链接]
累计签到:3 天
连续签到:1 天
来源: 2014-6-19 19:52:42 显示全部楼层 |阅读模式
1Qter豆
本帖最后由 mapstar 于 2014-6-19 21:03 编辑

QLineEdit中要求输入“度分秒”格式的角度值,具体为ddd.mmssssssss,小数点前为‘度’(0~365),小数点后两位为‘分’(0~59),再后面是‘秒’(0~5999999999),‘分’不能等于或大于60,‘秒’也一样。如输入23.5959999999合法,输入123.61345455不合法,输入23.5960292929也不合法。请问如何实现呢?

最佳答案

查看完整内容

mapstar,你好: 从我们以往的做法如下: 第一种方式(较苯但看得清本质):对已完成的QLineEdit得到的QString进行语法分析,包括 1) 是否有非数字和非"."的其他字符,如是直接提醒用户输入不合法; 2) 如符合1),继续检查"."是否在第1位或最后1位,如是直接提醒用户输入不合法; 3) 如符合上述2点,以"."为分隔符分拆QString为两部分,将前后两部分转换成Qint,比较是否符合 你的格式数值范围规定。 第二种方式(快速): ...
回复

使用道具 举报

尚未签到

2014-6-19 19:52:43 显示全部楼层
mapstar,你好:
    从我们以往的做法如下:
第一种方式(较苯但看得清本质):对已完成的QLineEdit得到的QString进行语法分析,包括
1) 是否有非数字和非"."的其他字符,如是直接提醒用户输入不合法;
2) 如符合1),继续检查"."是否在第1位或最后1位,如是直接提醒用户输入不合法;
3) 如符合上述2点,以"."为分隔符分拆QString为两部分,将前后两部分转换成Qint,比较是否符合
你的格式数值范围规定。
第二种方式(快速):请使用正规式,可参考C语言的sscanf()函数;
第三种方法(复杂点但最好): 接管QLineEdit录入的信号槽,一输入非数字非"."立即进行友好提醒;
当录入"."时,判断前部分是否符合度(0~365)范围,不是立即进行友好提醒并删除最后1位字符录入;
当录入"."后,判断后部分是否符合‘分’(0~59)和‘秒’(0~5999999999)范围,不是立即进行友好提醒并删除最后1位字符录入;
当录入回退或删除键是,重新递归判断,不符合要求立即进行友好提醒录入的格式。
祝好运!
begboy
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-6-20 23:04:17 显示全部楼层
感谢begboy,回复太详细了
回复

使用道具 举报

累计签到:1 天
连续签到:1 天
2014-6-22 22:38:33 显示全部楼层
好像还有一个方法,QRegExp,看看assistant吧
回复

使用道具 举报

尚未签到

2014-6-23 12:38:00 显示全部楼层
不客气。
能帮上忙是件好事。
begboy
回复

使用道具 举报

累计签到:3 天
连续签到:1 天
2014-6-23 16:43:00 显示全部楼层
kidding 发表于 2014-6-22 22:38
好像还有一个方法,QRegExp,看看assistant吧

嗯,我已试验成功,用validator和QRegExp
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

公告
可以关注我们的微信公众号yafeilinux_friends获取最新动态,或者加入QQ会员群进行交流:190741849、186601429(已满) 我知道了