QDataWidgetMapper und QLineEdit und Kommazahlen...

Alles rund um die Programmierung mit Qt
Antworten
markusd112
Beiträge: 33
Registriert: 30. Dezember 2012 18:25

QDataWidgetMapper und QLineEdit und Kommazahlen...

Beitrag von markusd112 »

Hallo,

ich stehe irgendwie auf dem Schlauch und mit Tante Google habe ich auch nichts passendes gefunden:

Ich habe eine sqlite Datenbank. In dieser befindet sich eine Spalte "Preis". Diese möchte ich an ein Eingabefeld in einem Formular binden. Dort soll das Feld im Format "####,## EUR" (oder von mir aus auch ohne Währung) angezeigt werden, aber mit festen zwei Nachkommastellen.

Derzeit wird statt eines Kommas ein Punkt und auch keine festen zwei Nachkommastellen angezeigt. Ich habe einen QDoubleValidator erstellt und zwei Dezimalstellen festgelegt und an das QLineEdit-Feld angekoppelt, aber ohne Erfolg...

Kann mir jemand einen Tipp geben?

Danke & Gruß

Markus
markusd112
Beiträge: 33
Registriert: 30. Dezember 2012 18:25

Re: QDataWidgetMapper und QLineEdit und Kommazahlen...

Beitrag von markusd112 »

Hallo,

ich glaube, ich war auf dem Holzweg?!

Die Lösung lautet: QDoubleSpinBox und Ausblenden der Hoch-/Runter-Buttons, anstatt eines QLineEdit Widgets.

Gruß

Markus
omegano
Beiträge: 21
Registriert: 18. Mai 2012 18:32

Re: QDataWidgetMapper und QLineEdit und Kommazahlen...

Beitrag von omegano »

Ist ne ziemliche Holzhacker Methode mMn was du da machst, beschäftige dich mal QRegExp oder falls es simpele Eingabenmasken tun mit QLineEdit->setInputmask().

Code: Alles auswählen

    
ui->lineEdit->setInputMask("00000000.00 Eur");
//Für die Inputmask findeste eine Tabelle in der Doku wie du dir die zusammenstellst die musste dir dann selbst mal angucken.

QRegExp rx("[0-9]\\d{0,9},[0-9]\\d{0,1} Eur"); 
//Erlaube Zahlen von 0-9 mit 10 Stellen(0 wird mitgezählt) dann ein komma und das selbe spiel nochmal mit 2 stellen hinterm komma 
// dann darfste noch ein leerzeichen machen und wenn du lustig bist noch Eur schreiben.

QValidator *validator = new QRegExpValidator(rx, this);
ui->lineEdit_2->setValidator(validator);
Ich hoffe das reicht dir so.
markusd112
Beiträge: 33
Registriert: 30. Dezember 2012 18:25

Re: QDataWidgetMapper und QLineEdit und Kommazahlen...

Beitrag von markusd112 »

Hallo,

Regular Expressions kenne ich. Auch das mit der InputMask war einer meiner ersten Ansätze.

Das Problem das ich dabei hatte: die aus der sqlite3-Datenbank übernommenen Werte wurden z.B. nicht ordentlich formatiert. Bei einer Inputmask von z.B. "000000,99" stand dann z.B. im Eingabefeld:

"6_____,__"

Auch war sehr unschön, dass das Feld nicht von rechts nach links aufgefüllt wird und der Cursor beim Fokuserhalt ganz links im Eingabefeld stand. Es schien so, als wenn da zusätzliche Spaces mit drin waren...

Oder habe ich da irgendwas falsch gemacht?

Ich vermute mal, dass QLineEdit zum Editieren von Texten gedacht ist, nicht von Kommazahlen. Da müsste man sich dann schon eine eigene Klasse ableiten ("QDoubleLineEdit" oder so) und das Verhalten entsprechend (Formatierung der Werte beim Setzen eines Wertes und nach Änderung durch den Nutzer) implementieren. Bei der DoubleSpinBox ist das schon "out of the box" vorhanden... Oder ist das der falsche Ansatz? (weil Du was von Holzhackermethode schreibst?)

Ich arbeite mich gerade in Qt ein, insofern bin ich mir manchmal unsicher, ob ich auf dem richtigen Weg bin und freue mich über Tipps.

Viele Grüße

Markus
omegano
Beiträge: 21
Registriert: 18. Mai 2012 18:32

Re: QDataWidgetMapper und QLineEdit und Kommazahlen...

Beitrag von omegano »

Naja, wenn du das mit dem QRegExp machst müsste die formatierung aber eigentlich gut machbar sein. da man es ja optional machen kann ob du nun eine oder 9 stellen vor dem komma angibst. somit ist der fokus dann auch richtig. ansonsten kannste dir wie du schon gesagt hast einfach nen eigenes LineEdit zusammen Zimmern, und das mit der Holzhacker Methode ist halt nur meine Meinung ob das andere auch so sehen weis ich nicht^^. Finde es nur mit den QRegExp irgendwie eleganter ;). Allerdings bin ich auch noch weit davon entfernt mich selbst als guter Qt Programmierer zu bezeichnen. Ich kann dir lediglich sagen das es mir mein Qt Buch so beigebracht hat. Naja ich hoffe ich konnte dir zumindestens etwas helfen.
seppl
Beiträge: 6
Registriert: 4. November 2012 12:26
Wohnort: Speyer

Re: QDataWidgetMapper und QLineEdit und Kommazahlen...

Beitrag von seppl »

Falls Du noch keine Lösung hast (bin zufällig auf der Suche nach was anderem auf diesen Thread gestoßen), ich habe es mit qt3 so gemacht:

Code: Alles auswählen

QString betrag=LineEditBetrag->text(); 
betrag.replace(",",".");
QSqlQuery queryInsert("insert into Tabelle(..., betrag, ...)values
('"+ ... + "', '"+ betrag +"','" + ... + "' ");
Kurs zur Erklärung: Was im LineEditBetrag steht, wird an den QString "betrag" übergeben, wobei das Komma durch den Punkt ersetzt wird, genauso, wie es SQLite haben will. Bei Abfragen kann man dan den umgekehrten Weg gehen.

Ob es genauso mit qt4 geht - mir ist nix Gegenteiliges bekannt.

Viele Grüße,

Seppl
Antworten