2

アプリケーションにQLineEditがあり、英語で最大10バイトの文字を入力でき、日本語の文字を入力しているときに、文字が2バイトの場合、日本語で5文字しか入力できないはずです。文字は1バイト文字なので、日本語で10文字入力できるはずです。これを手伝ってください。

使ってみました

QLineEdit::setMaxLength(10) 

ただし、英語の文字でのみ正常に機能し、日本語の文字では機能しません。

任意のアイデア/提案???

4

2 に答える 2

2

文字に使用されるバイト数は、文字を格納するために使用するエンコーディングに完全に依存することに注意してください。 QStringすべての文字に2バイトを使用しますが、おそらくUTF-8などの特定のエンコーディングに関心があります。使用するのではなく、特定の検証ルールを実装setMaxLengthするサブクラスを作成し、それを行編集に設定する必要があることをお勧めします。QValidator

于 2013-03-25T11:52:23.117 に答える
-1

私は次のように問題を解決しました:

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

      }


 }

ロシア文字/日本語文字などでよくテストされています。

于 2013-03-26T05:20:26.730 に答える