我的应用程序中有一个QLineEdit,我应该能够输入最多10个字节的英文字符,并且在输入日文字符时,如果字符是2byte,我应该只能输入5个日文字符,如果是日文character是一个1byte的字符,我应该可以在日语中输入10个字符 . 请帮我解决一下这个 .
我试过用
QLineEdit::setMaxLength(10)
但它仅适用于英文字符,但不适用于日文字符 .
任何想法/建议???
我解决了我的问题如下:
在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(); } }
经过俄语字符/日文字符等测试 .
请注意,字符使用的字节数完全取决于用于存储字符的编码. QString 对所有字符使用2个字节,但可能您对特定编码(如UTF-8)感兴趣 . 我建议你不要使用 setMaxLength ,而是需要创建一个 QValidator 子类来实现你的特定验证规则并在你的行编辑中设置它 .
QString
setMaxLength
QValidator
2 回答
我解决了我的问题如下:
在LineEdit插槽中:
经过俄语字符/日文字符等测试 .
请注意,字符使用的字节数完全取决于用于存储字符的编码.
QString
对所有字符使用2个字节,但可能您对特定编码(如UTF-8)感兴趣 . 我建议你不要使用setMaxLength
,而是需要创建一个QValidator
子类来实现你的特定验证规则并在你的行编辑中设置它 .