qt — C ++ QLineEdit: setmaxlength () для количества байтов, а не для количества символов?

У меня есть QLineEdit в моем приложении, в котором я должен иметь возможность вводить не более 10 байтов символов на английском языке, и при вводе японских символов, если символ состоит из 2 байтов, я должен иметь возможность вводить только 5 символов на японском и, если японский символ является 1-байтовым символом, я должен быть в состоянии ввести 10 символов на японском языке. пожалуйста
помоги мне с этим.

Я пытался с помощью

QLineEdit::setMaxLength(10)

но работает нормально только
с английскими иероглифами, но не с японскими.

Любая идея / предложения ???

2

Решение

Обратите внимание, что количество байтов, используемых для символа, полностью зависит от того, в какой кодировке вы используете его для хранения. QString использует 2 байта для всех символов, но, вероятно, вы заинтересованы в конкретной кодировке, такой как UTF-8. Я бы предложил, а не использовать setMaxLength вам нужно создать QValidator подкласс, который реализует ваши конкретные правила проверки и устанавливает его в вашей строке edit.

2

Другие решения

Я решил свою проблему следующим образом:

В слоте 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();

}}

Хорошо протестировано с русскими иероглифами / японскими и т.д.

-1

По вопросам рекламы [email protected]