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

前端之家收集整理的这篇文章主要介绍了QLineEdit 控制输入格式——正则表达式与输入掩码前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

  1. QRegExp rx("((2[0-4]\\d|25[0-5]|[01]?\\d\\d?)\\.){3}(2[0-4]\\d|25[0-5]|[01]?\\d\\d?)");
  2.  
  3. QRegExpValidator *pReg = new QRegExpValidator(rx,this);
  4.  
  5. ipLineEdit->setValidator(pReg);
  6. maskLineEdit->setValidator(pReg);
  7. gatewayLineEdit->setValidator(pReg);
  8. dnsLineEdit->setValidator(pReg);

  可以看到,这里使用 QRegExpValidator 类来检查字符串是否符合正则表达式。这里对上面的正则表达式进行简单说明,更详细说明请查阅相关资料。

  • \d:匹配一个数字,等同于[0-9]
  • \.:匹配一个小数点
  • ?:表示重复前面内容的0次或1次
  • 2[0-4]\\d:涵盖了200~249之间的值
  • 25[0-5]:涵盖了250~255之间的值
  • [01]?\\d\\d?:涵盖了0~199之间的值

然后通过 setInputMask 函数设置输入掩码。部分代码如下:

  1. ipLineEdit->setInputMask("000.000.000.000;0");
  2. maskLineEdit->setInputMask("000.000.000.000;0");
  3. gatewayLineEdit->setInputMask("000.000.000.000;0");
  4. dnsLineEdit->setInputMask("000.000.000.000;0");

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

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

  1. // returns IP address in network byte order
  2. static unsigned int GetLocalIP(char *ifr_name)
  3. {
  4. struct ifaddrs *pIfList; // pointer to interfaces list
  5. struct ifaddrs *pIfInfo; // pointer to interface info
  6. unsigned int Address = 0;
  7. int i;
  8.  
  9. if (getifaddrs(&pIfList) != -1)
  10. {
  11. pIfInfo = pIfList;
  12. while (pIfInfo != NULL)
  13. {
  14. if(pIfInfo->ifa_addr != NULL)
  15. {
  16. if ((pIfInfo->ifa_addr->sa_family == AF_INET) || (pIfInfo->ifa_addr->sa_family == AF_INET6))
  17. {
  18. if (strcmp(pIfInfo->ifa_name,ifr_name) == 0)
  19. {
  20. Address = ((struct sockaddr_in *) pIfInfo->ifa_addr)->sin_addr.s_addr;
  21. if (Address != 0)
  22. {
  23. break;
  24. }
  25. }
  26. }
  27. }
  28. pIfInfo = pIfInfo->ifa_next;
  29. }
  30. freeifaddrs(pIfList);
  31. }
  32.  
  33. //showIpstring(Address);
  34. return Address;
  35. }

猜你在找的正则表达式相关文章