首页 文章

C QLineEdit:setmaxlength()表示字节数而不是字符数?

提问于
浏览
2

我的应用程序中有一个QLineEdit,我应该能够输入最多10个字节的英文字符,并且在输入日文字符时,如果字符是2byte,我应该只能输入5个日文字符,如果是日文character是一个1byte的字符,我应该可以在日语中输入10个字符 . 请帮我解决一下这个 .

我试过用

QLineEdit::setMaxLength(10)

但它仅适用于英文字符,但不适用于日文字符 .

任何想法/建议???

2 回答

  • -1

    我解决了我的问题如下:

    在LineEdit插槽中:

    void ABC::on_abc_cmd_task_tableWidget_linedit_cellChanged(QString str)
     {
        QLineEdit *edit = qobject_cast<QLineEdit *>(sender());
    
        if(edit)
        {
            QByteArray chkDataSize;
            chkDataSize.clear();
            chkDataSize.append(str);
            int dSize = chkDataSize.size();
    
            qDebug() << "total Bytes in text = " << dSize;
            qDebug() << "Max length before = " << edit->maxLength();
    
            if (dSize == edit->maxLength())
            {
                 edit->setMaxLength(str.size());
            }
    
            qDebug() << "Max length after = " << edit->maxLength();
    
          }
    
    
     }
    

    经过俄语字符/日文字符等测试 .

  • 2

    请注意,字符使用的字节数完全取决于用于存储字符的编码. QString 对所有字符使用2个字节,但可能您对特定编码(如UTF-8)感兴趣 . 我建议你不要使用 setMaxLength ,而是需要创建一个 QValidator 子类来实现你的特定验证规则并在你的行编辑中设置它 .

相关问题