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

时间:2013-03-25 11:29:44

标签: c++ qt qlineedit

我的应用程序中有一个QLineEdit,我应该可以输入最多10个字节的英文字符,并且输入日文字符时,如果字符是2字节,我应该只能输入5个日文字符和如果日文字符是1字节字符,我应该能够输入10个日文字符。请 帮助我。

我尝试使用

QLineEdit::setMaxLength(10) 

但它只是工作正常 英文字符,但没有日文字符。

任何想法/建议???

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:-1)

我解决了我的问题如下:

在LineEdit Slot中:

 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();

      }


 }

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