У меня есть QLineEdit в моем приложении, в котором я должен иметь возможность вводить не более 10 байтов символов на английском языке, и при вводе японских символов, если символ состоит из 2 байтов, я должен иметь возможность вводить только 5 символов на японском и, если японский символ является 1-байтовым символом, я должен быть в состоянии ввести 10 символов на японском языке. пожалуйста
помоги мне с этим.
Я пытался с помощью
QLineEdit::setMaxLength(10)
но работает нормально только
с английскими иероглифами, но не с японскими.
Любая идея / предложения ???
Обратите внимание, что количество байтов, используемых для символа, полностью зависит от того, в какой кодировке вы используете его для хранения. QString
использует 2 байта для всех символов, но, вероятно, вы заинтересованы в конкретной кодировке, такой как UTF-8. Я бы предложил, а не использовать setMaxLength
вам нужно создать QValidator
подкласс, который реализует ваши конкретные правила проверки и устанавливает его в вашей строке edit.
Я решил свою проблему следующим образом:
В слоте 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();
}}
Хорошо протестировано с русскими иероглифами / японскими и т.д.