Qt文本框设置正则表达式校验输入失效

用四个文本框来输入IP地址,对文本框设置了正则表达式来校验输入的有效性。

核心代码如下:

// 设置正则表示校验输入

QRegExp rx1("[1-9]{1}"      // 1num: 1-9
        "|[1-9]{1}[0-9]{1}"     // 2num: 10-99
        "|1[0-9]{2}"            // 3num: 100-199
        "|2[0-4]{1}[0-9]{1}"    // 3num: 200-249
        "|25[0-4]{1}"           // 3num: 250-254
    );
    QRegExp rx2("[0-9]{1}"      // 1num: 0-9
        "|[1-9]{1}[0-9]{1}"     // 2num: 10-99
        "|1[0-9]{2}"            // 3num: 100-199
        "|2[0-4]{1}[0-9]{1}"    // 3num: 200-249
        "|25[0-5]{1}"           // 3num: 250-255
    );
    QRegExpValidator *pReg1 = new QRegExpValidator(rx1, this);
    QRegExpValidator *pReg2 = new QRegExpValidator(rx2, this);
    ui->lineIP_1->setValidator(pReg1);
    ui->lineIP_2->setValidator(pReg2);
    ui->lineIP_3->setValidator(pReg2);
    ui->lineIP_4->setValidator(pReg1);
    

  // 输入失效后跳转到下一节IP输入
    connect(ui->lineIP_1, &QLineEdit::inputRejected, this, [this]() {
        ui->lineIP_2->setFocus();
    });
    connect(ui->lineIP_2, &QLineEdit::inputRejected, this, [this]() {
        ui->lineIP_3->setFocus();
    });
    connect(ui->lineIP_3, &QLineEdit::inputRejected, this, [this]() {
        ui->lineIP_4->setFocus();
    });

以上代码意思很明确,简单明了,但是功能却失效了。首尾IP段限定只能输入 1~254的数字,中间两段限定只能输入 0~255的数字。但是却失效了,除了数字还能输入汉字,概率很高,根本不起作用?一度怀疑是Qt自身的问题,后来发现还真算是Qt的问题吧。

        原因是:文本框设定了maxLength属性,设置为3,应该是这个限定和正则冲突了。maxLength属性恢复为默认值,问题解决。

        Qt版本:5.13.2

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值