QLineEdit实现小数位补全

本文目的,实现QLineEdit输入文本的限制,例如输入限制为:10.0000~89.9975,步进为0.0025;

知识点,网上有通过setValidator正则式和子网掩码setInputMask方式来实现小数输入范围:

void MainWindow::initLineEdit()
{
    QRegExp regExp("(([1-8]\\d))\\.\\d{2}[0,2,5,7][0,5]");
    QRegExpValidator *pReg = new QRegExpValidator(regExp, this);
    ui->lineEdit->setValidator(pReg);
    ui->lineEdit->setInputMask("00.0000;0");
}

void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
    qDebug() << "arg1:" << arg1;
}

通过绑定的信号槽发现,当输入为10.5000时,对应的arg1的值1.5。----------巨坑,可能是我对setInputMask研究不够吧,但是这个数据坑死我了,所以这种方法对于我来说不可行;

  1. 无法实现数据的正确保存;
  2. 无法自动补全步进;

实现方法如下,自动补齐小数点和补全步进:

void MainWindow::initLineEdit()
{
    QRegExp regExp("(([1-8]\\d))\\.\\d{2}[0,2,5,7][0,5]");
    QRegExpValidator *pReg = new QRegExpValidator(regExp, this);
    ui->lineEdit->setValidator(pReg);
//    ui->lineEdit->setInputMask("00.0000;0");
    ui->lineEdit->setText("10.0000");
}
void MainWindow::on_lineEdit_textChanged(const QString &arg1)
{
    static QString temp;   //创建静态局部变量,保存上次文本内容

    qDebug() <<"arg1:" << arg1;
    qDebug() <<"temp:" << temp;

    if(arg1.length() == 2 &&
       temp.length() == 1 &&
       (!arg1.contains(".")))  
    {
        //case 1,当前输入两位数,且上次为一位数,说明此时正在输入,自动添加小数点
        temp = arg1+".";
    }
    else if(arg1.length() == 6 &&
            temp.length() == 5)
    {
        //case 2,当前输入为千分位,即小数点后第三位,自动进行0或5的补全
        switch (arg1.at(5).digitValue()) {
        case 2:
        case 7:
            temp = arg1+QString::number(5);
            break;
        case 0:
        case 5:
            temp = arg1+QString::number(0);
            break;
        default:
            break;
        }

    }
    else
    {
        temp = arg1;
    }
    ui->lineEdit->setText(temp);
}

要点1:通过静态局部变量来存储上次(QlineEdit输入)输入内容,在QLineEdit输入12575时,控制台打印输出如下,temp静态变量会存储文本更改之前的内容,从而实现文本的自动补全和删除;

要点2:有些arm上不支持[.]按键,我们可以通过这种方法来实现小数点的自动添加,提高用户体验;

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

nobSlience

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值