QLineEdit 控制输入格式——正则表达式与输入掩码

https://blog.csdn.net/lu_embedded/article/details/53901606

在实际应用中,我们常常需要在界面上控制用户的输入行为,以此来简化数据的处理。在 Qt 中,我们可以利用正则表达式和输入掩码来达到这种效果,例如 IP 地址的输入。 
  首先,构建正则表达式,并通过 QLineEdit 的 setValidator 函数进行输入校验设置,从而控制输入行为。部分代码如下:

QRegExp rx("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");

QRegExpValidator *pReg = new QRegExpValidator(rx, this);

ipLineEdit->setValidator(pReg);
maskLineEdit->setValidator(pReg);
gatewayLineEdit->setValidator(pReg);
dnsLineEdit->setValidator(pReg);
1
2
3
4
5
6
7
8
  可以看到,这里使用 QRegExpValidator 类来检查字符串是否符合正则表达式。这里对上面的正则表达式进行简单说明,更详细说明请查阅相关资料。

\d:匹配一个数字,等同于[0-9]
\.:匹配一个小数点
?:表示重复前面内容的0次或1次
2[0-4]\\d:涵盖了200~249之间的值
25[0-5]:涵盖了250~255之间的值
[01]?\\d\\d?:涵盖了0~199之间的值
然后通过 setInputMask 函数设置输入掩码。部分代码如下:

ipLineEdit->setInputMask("000.000.000.000;0");
maskLineEdit->setInputMask("000.000.000.000;0");
gatewayLineEdit->setInputMask("000.000.000.000;0");
dnsLineEdit->setInputMask("000.000.000.000;0");
1
2
3
4
  注意:这里的”000.000.000.000;0“,只有加上 ;0 ,才使得正则表达式和输入掩码同时生效。(可能是我还没发现更好的方法,如果你有更好的方法,请务必告诉我。) 
  效果如下: 

  另外,如果需要获取网络配置信息,可以调用 getifaddrs() 这个接口,它可以查找到系统所有的网络接口的信息,包括以太网卡接口和回环接口等。这里给出一个应用示例:

// returns IP address in network byte order
static unsigned int GetLocalIP(char *ifr_name)
{
   struct ifaddrs *pIfList;        // pointer to interfaces list
   struct ifaddrs *pIfInfo;        // pointer to interface info
   unsigned int Address = 0;
   int i;

   if (getifaddrs(&pIfList) != -1) 
    {
        pIfInfo = pIfList;
        while (pIfInfo != NULL)
        {
            if(pIfInfo->ifa_addr != NULL)
            {
                if ((pIfInfo->ifa_addr->sa_family == AF_INET) || (pIfInfo->ifa_addr->sa_family == AF_INET6)) 
                {
                    if (strcmp(pIfInfo->ifa_name, ifr_name) == 0)
                    {
                        Address = ((struct sockaddr_in *) pIfInfo->ifa_addr)->sin_addr.s_addr;
                        if (Address != 0)
                        {
                            break;
                        }
                    }
                }
            }
            pIfInfo = pIfInfo->ifa_next;
        }
        freeifaddrs(pIfList);
    }

    //showIpstring(Address);
    return Address;
}

掩码字符

字符 (大写)必须输入  (小写)可留空
 

A

ASCII字母字符是必须的,取值空间是A-Z,a-z

a

ASCII 字母字符是允许的但不是必须的.

N

ASCII字母字符是必须的. A-Z, a-z, 0-9.

n

ASCII 字母字符是允许的但不是必须的.

X

任何字符都可以,是必须需要的.

x

任何字符都允许的,但不是必须需要的.

9

ASCII 数字是必须要的. 0-9.

0

ASCII 数字是允许的,但不是必须要的.

D

ASCII  数字是必须要的. 1-9.

d

ASCII 数字是允许的,但不是必须要的 (1-9).

#

ASCII 数字是或加减符号允许的,但不是必须要的.

H

十六进制数据字符是必须要的. A-F, a-f, 0-9.

h

十六进制数据字符是允许的,但不是必须要的.

B

二进制数据字符是必须要的. 0-1.

b

二进制数据字符是允许的,但不是必须要的.

>

所有的字符字母都都大写的.

<

所有的字符字幕都是小写的.

!

关闭大小写.

\

使用 \ 去转义上面的字符,如果再需要显示上述字符的时候.

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值