Qt如果不是十六进制,则从QLineEdit中删除字符

Abh*_*wal 1 c++ string qt

我的Qt应用程序中有一个QLineEdit需要以十六进制值作为输入.如果输入的字符不是十六进制,我希望应用程序显示警告消息框,并从QLineEdit中删除无效字符.必须在QLineEdit中每个字符的条目处执行此检查.到目前为止,我有这个:

void MemoryTestWindow::on_lineEditAddress1_textChanged(const QString &arg1)
{
        QString text1=ui->lineEditAddress1->text();
        int len=text1.length();
        QChar ch=text1.at(len-1).toUpper();
        if(!((ch>='A'&& ch<='F')|| (ch>='0' && ch<='9')))
        {
            text1.remove(len-1,1);
            //*arg1="";
            QMessageBox::warning(this,"Invalid Character!","Please enter hexadecimal characters 0-9, A-F");

        }

} 
Run Code Online (Sandbox Code Playgroud)

我正在使用QLineEdit的textChanged插槽,因为我需要在每个字符输入后执行检查.我无法想象如何更改QLineEdit中的值,即在警告消息框中单击"确定"后应删除最后一个无效字符.我怎样才能做到这一点?

Ant*_*ane 5

不要重新发明轮子;)使用旨在实现您想要的Qt工具,您可能会获得更好的结果.

QLineEdit :: mask允许您定义编辑控件中允许的字符.特别是,使用H字符定义掩码将允许您确定控件中允许的十六进制字符数.

如果这不足以满足您的要求,请查看验证程序以获得更复杂和完整的验证过程.