QT中限制输入文本框格式

在串口助手的输入行,总会面临着字符串和16进制输入的选择,我们在16进制输入时,肯定想规范输入,这样查看自己的输入是否正确也是非常方便的,那么如何实现,我在网上发现很多都是使用正则表达式,进行对输入的限制,例如

QString str = "\\b(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\\.){3}(?:25[0-5] | 2[0 - 4][0 - 9] | [01] ? [0 - 9][0 - 9] ? )\\b";
ui->ipEdit->setValidator(new QRegExpValidator(QRegExp(str)));
```cpp
ui->lineEdit->setValidator(new QRegularExpressionValidator(QRegularExpression("^[0-9a-f]{8}$")));

下面。我们来解释一下这两个正则表达式,第一个是一个ipv4地址的输入格式限制。
‘\b’表示这行数据的边界(?:…)的作用是分组,25[[0-5],表示只匹配250-255的数字,2[0-4][0-9]表示只匹配200-249的数字,'\.'匹配输入区分数字段的‘.’号;{3}表示前面的分组重复3次,后面即匹配ipv4的最后一个数字段。
第二个代码就是匹配16进制的输入,‘^'表示字符串的开始[0-9a-f]匹配16进制的字符,{8},表示输入有8个,’$'符号表示字符串的结束,是不是非常麻烦,下面介绍用输入掩码的方式进行输入格式限制。

ui->sensor2Edit->setInputMask("HH HH HH HH HH");

很简洁的实现了我个人需要的功能,因为我所需要的只是固定发送5个16进制数,其中HH表示限制输入只能是16进制,也可以像这样限制ip地址,像下面这样。

ui->ipEdit->setInputMask("000.000.000.000");

但是这并不能限制数据的范围,你输个非法的IP地址也是能接收的,所以这种就需要用正则表达式进行更加严格的检验。
最后,如何将Edit中接收的以16进制转发出去,因为我们实际输入的并不是16进制,而是字符,如果直接转发的话,会打印成对应的ASCII码,比如你输入0A,实际上对方收到的是30 41。

    for (int i = 0; i < hexData.size(); i += 3) {
        QString hexP= hexData.mid(i, 2); // 获取两个十六进制字符
        bool ok;
        int value = hexP.toInt(&ok, 16); // 将十六进制字符对转换为整数
        if (ok) {
            byteArray.append(static_cast<char>(value)); // 将整数添加到QByteArray中
        } else {
            QMessageBox::critical(this,"提示","解析错误");
            // 处理转换错误的情况
        }

只需去掉刚刚输入的空格,并转换为整数即可,这里i+=3就是只获取字符,跳过中间的空格。
在这里插入图片描述

  • 12
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值