2017-07-11 8 views
0

私はAndroidの下にQtアプリケーションを配備しています。 QLineEditの長さが(setMaxLengthを使用して)制限されている場合、Android virutalキーボードで許可されている文字数よりも多くの文字を入力でき、後で仮想キーボードを閉じるとQlineEditのコンテンツが切り捨てられます。QLineEdit :: maxLength Androidのサポート

#include <QApplication> 
#include <QMainWindow> 
#include <QVBoxLayout> 
#include <QLineEdit> 

int main(int argc, char* argv[]) 
{ 
    QApplication app(argc, argv);  

    QMainWindow wnd; 

    QLineEdit edit(&wnd); 
    edit.setMaxLength(10); 
    wnd.setCentralWidget(&edit); 

    wnd.show(); 

    return app.exec(); 
} 

この制限を仮想キーボードで処理する方法はありますか?ユーザーが許可されている以上の文字を入力できないようにする方法はありますか?

注:qtのバグを作成:https://bugreports.qt.io/browse/QTBUG-61940

+0

QLineEditにも同様の問題があります。 lineEditに入力するすべてのテキストは自動的に大文字になります。 – aghilpro

+0

QLineEditイベントのテキストを変更して、特定の文字数を入力するのを防ぐことができますが、これは良い解決策ではありません。 – aghilpro

+0

@aghilpro:良い解決策ではありませんが、受け入れられるかもしれません... – jpo38

答えて

-1

異なる選択肢、そのはQLineEdit::setMaxLength機能を使用して最初のものがあります。

このプロパティは、テキストの最大許容長を保持します。 テキストが長すぎる場合は、上限で切り捨てられます。あなたがAndroidのキーボードに問題がある場合は

は、その後の選択肢は、あなたが与えられたQRegExpQValidatorを使用することにより、最大許容サイズを設定することができます。あなたの目的のために良いものがあり得る:

/^(?=.{3,16}$)[a-z][a-z0-9]*(?:_[a-z0-9]+)*$/ 

または最も簡単なものを:

値{0、400}はあなたの文字列の最大許容サイズを定義
^\s*([^\s]\s*){0,400}$ 

。例:

QRegExp regexp("^\s*([^\s]\s*){0,400}$"); 
QRegExpValidator *validator = new QRegExpValidator(regexp, this); 
lineEdit->setValidator(validator); 

最後の1、ちょうどtextChanged信号を処理し、それを回避しようと、手動で文字列を制限します。

+0

私はこれがAndroidの仮想キーボードによって処理されるのではないかと疑います。それは同じ動作になります。ユーザーは自分が望むものを入力することが許され、検証の際にコンテンツが変更されます... – jpo38

+0

これは、Androidで予想以上に多くの文字を入力することを妨げません。それは 'setMaxLength'と同じ振る舞いで終わります。 – jpo38