アプリケーションにQLineEditがあり、英語で最大10バイトの文字を入力でき、日本語の文字を入力しているときに、文字が2バイトの場合、日本語で5文字しか入力できないはずです。文字は1バイト文字なので、日本語で10文字入力できるはずです。これを手伝ってください。
使ってみました
QLineEdit::setMaxLength(10)
ただし、英語の文字でのみ正常に機能し、日本語の文字では機能しません。
任意のアイデア/提案???
文字に使用されるバイト数は、文字を格納するために使用するエンコーディングに完全に依存することに注意してください。 QString
すべての文字に2バイトを使用しますが、おそらくUTF-8などの特定のエンコーディングに関心があります。使用するのではなく、特定の検証ルールを実装setMaxLength
するサブクラスを作成し、それを行編集に設定する必要があることをお勧めします。QValidator
私は次のように問題を解決しました:
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();
}
}
ロシア文字/日本語文字などでよくテストされています。