2017-07-11 5 views
0

Ich bin eine Qt-Anwendung unter Android bereitstellen. Wenn die Länge QLineEdit begrenzt ist (unter Verwendung setMaxLength), kann ich mit der virtuellen Android-Tastatur mehr Zeichen eingeben als erlaubt und später wird der Inhalt QlineEdit abgeschnitten, wenn die virtuelle Tastatur geschlossen wird.QLineEdit :: maxLength Unterstützung für 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(); 
} 

Gibt es eine Möglichkeit, diese Grenze zu haben durch die virtuelle Tastatur gehandhabt wird nicht vom Benutzer zu lassen, mehr Zeichen eingeben, als erlaubt?

Hinweis: Erstellt qt Fehler: https://bugreports.qt.io/browse/QTBUG-61940

+0

Ich habe ein ähnliches Problem mit QLineEdit. Alle Texte, die in lineEdit eingegeben werden, werden automatisch großgeschrieben. – aghilpro

+0

Sie können Text bei Ereignis QLineEdit Text geändert erhalten und verhindern, dass Benutzer mehr als die bestimmte Anzahl von Zeichen eingeben, aber das ist keine gute Lösung. – aghilpro

+0

@aghilpro: Nicht gute Lösung, aber möglicherweise akzeptabel ... – jpo38

Antwort

-1

Es gibt verschiedene Alternativen, die erste seiner die QLineEdit::setMaxLength Funktion. Laut der offiziellen Dokumentation:

Diese Eigenschaft enthält die maximal zulässige Länge des Textes. Wenn der Text zu lang ist, wird er am Limit abgeschnitten.

Wenn Sie Probleme mit der Android-Tastatur haben, dann eine Alternative, können Sie die max Größe festgelegt durch ein QValidator mit einer gegebenen QRegExp verwenden. Für Ihren Zweck könnte eine gute sein:

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

Oder eine einfachste:

^\s*([^\s]\s*){0,400}$ 

Wenn der Wert {0, 400}, um die maximal zulässige Größe der Zeichenfolge definiert. Beispiel:

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

Die letzte, versuchen, es zu vermeiden, behandeln nur die textChanged Signal und begrenzen manuell die Zeichenfolge.

+0

Ich bezweifle, dass dies von Android virtuelle Tastatur behandelt wird. Es wird das gleiche Verhalten sein, Benutzer darf eingeben, was er will, und Inhalt wird dann bei der Validierung geändert werden ... – jpo38

+0

Dies verhindert nicht die Eingabe von mehr Zeichen als erwartet unter Android. Es endet mit dem gleichen Verhalten wie 'setMaxLength' – jpo38

Verwandte Themen