2017-09-23 7 views
1

Wie schreibe ich in QLineEdit Gleitkommazahlen im Bereich (0.0 - 5.0)? Ich benutze qregexp für eine solche Aufgabe zum Beispiel QRegExp a("([a-zA-Z]{3,30})"), um Benutzernamen zu schreiben, aber habe keine Ideen, um Float-Nummern zu schreiben.Nur Gleitwerte in QLineEdit schreiben

+4

Nicht sicher, was Sie mit dem Schreiben meinen, aber suchen Sie nach Validierung? Siehe [QDoubleValidator] (http://doc.qt.io/qt-5/qdoublevalidator.html) – Blechdose

Antwort

1

Die beste Möglichkeit ist die QDoubleValidator für eine solche Aufgabe zu verwenden, da es nicht nur die Form des Eingangs validieren, sondern auch die Bereich:

auto dv = new QDoubleValidator(0.0, 5.0, 2); // [0, 5] with 2 decimals of precision 
yourLineEdit->setValidator(dv); 

Wenn Sie mit vielen Dezimalstellen zu tun haben, (oder wenn Sie planen, den Bereich zu einem breiteren ändern), dann würden Sie wahrscheinlich daran interessiert sein, die wissenschaftliche Schreibweise zu deaktivieren:

dv->setNotation(QDoubleValidator::StandardNotation); 

auf der anderen Seite, und für die Vollständigkeit der Antwort, da Sie nach regulären Ausdrücken gefragt haben, ist eine allgemeine Regex für die Float-Nummer [-+]?[0-9]*\.?[0-9]+, so dass Sie für Ihren bestimmten Bereich versuchen können: ([0-4]?\.[0-9]+)|(5\.0+)|([0-5]). Trotzdem empfehle ich die Verwendung des Validators, da die Regex schwieriger zu skalieren ist, wenn sich der Bereich über das Projekt oder in der Laufzeit ändert.

+2

@ mark1999 Anstelle von 'QLineEdit' und' QDoubleValidator' können Sie auch eine 'QDoubleSpinBox' verwenden. Es ist eher so, als ob der Benutzer mit dem Mausrad von einem Wert zu einem anderen springen kann. –

+0

@ BenjaminT +1. Ich stimme auch zu: Eine 'QDoubleSpinBox' wäre eine schönere und sauberere Lösung, wenn das OP den' QLineEdit' beiseite legen könnte. – cbuchart