QSqlTableModel, Darstellung von Datum und Zeit im Formular.

Alles rund um die Programmierung mit Qt
Antworten
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

QSqlTableModel, Darstellung von Datum und Zeit im Formular.

Beitrag von harry_m »

Hallo Gemeinde,

ich habe Daten, die in einer SQLite3 Datenbank liegen in einem Formular anzuzeigen und zu editieren. Darunter sind auch Datumwerte.

Datumangaben habe ich in die Datenbanktabellen mit Hilfe des "SQLite Administrator" eingetragen: und dort wurde "10.12.2013" problemlos akzeptiert.

Im Formular, wo ich die Daten in ein "QLineEdit" mit Hilfe des "QDataWidgetMapper" einblende taucht plötzlich "2013-12-10" auf. Dabei ist "Sprache" und "Land" unter "Locale" im Designer auf "Germany" eingestellt.

Kann mir jemand einen Tipp geben, wo ich dazu eine vernünftige Beschreibung finde? - Habe bis jetzt nichts gefunden, was mir weiter helfen würde. Das Zusammenspiel zwischen "QDate" und den entsprechenden Datentypen in den Datenbanken ist mir nicht ganz klar. Auch auf die Frage, wie ich die Datums/Zeit-Darstellung im "QLineEdit" beeinflussen kann...

Gruß
Harry
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von Hulk2442 »

Aus deiner Beschreibung geht nicht ganz hervor wofür du das QLineEdit verwendest.
Deshalb mal eine Annahme - Wärst du nicht mit einem "QDateEdit" mehr zufrieden?
Diesem Kannst du auch mit der Funktion "displayFormat" einstellen wie das Datum angezeigt wird.
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von harry_m »

Danke für den Anstoss.

Eigentlich war das von Anfang an auch meine Idee: diese habe ich jedoch verworfen, nachdem ich die Handhabung im Designer kurz ausprobiert habe (hat mir nicht gefallen).
Jetzt habe ich sie nochmals genauer angesehen und stellte fest, dass es doch nicht so übel ist: und macht obendrauf genau das, was ich wollte. So kann man sich verlaufen.

Nochmals besten Dank.

Gruß
Harry
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von harry_m »

Nachdem "QDateEdit" seine Aufgabe zu meiner vollsten Zufriedenheit in mehreren Formularen erledigte, kam ich guten Mutes an einem Formular an, wo neben dem Datum und anderen Angaben auch Zeit angezeigt werden soll. Und bekam ein Problem.

Analog zu anderen Formularen habe ich "QTimeEdit" eingesetzt und entdeckte ein seltsames Problem: dieses Element kommuniziert mit dem "QSqlRelationalTableModel" soz. nur in eine Richtung - Eingaben in diesem Widget werden an das "TableModel" weiter gegeben und dann in der Datenbank gespeichert. Aber in die umgekehrte Richtung geht es nicht: egal, was ich tue, beim Blättern in den Datensätzen bleibt die Anzeige in den "QTimeEdit"-Feldern unverändert. Gleichzeitig funktioniert die Anzeige der Daten im "QDateEdit", "QLineEdit" und "QPlainText" genau wie erwartet.

Wüsste jemand den Grund dazu? Mir fällt gerade nichts mehr ein.

(Die Verbindung zum tabModel erfolgt über den "QDataWidgetMapper").
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von harry_m »

Und jetzt die Lösung des Problems...

Ich habe für die Anzeige der Zeitwerte im Designer "TimeEdit" Widget gewählt: analog zum "DateEdit" den ich für die Darstellung des Datums gewählt habe.

Das war ein Fehler.

Probeweise habe ich "TimeEdit" durch "Date/Time Edit" ersetzt (und die Anzeige auf "HourSelection" im Format "HH:mm" umgestellt): damit funktioniert es genau wie erwartet.

Auch wenn ich die Lösung jetzt habe, scheint es mir doch ein Fehler im "TimeEdit" Widget zu sein. Oder vielleicht verstehe ich den Gedanken dahinter nicht. Wenn "Date/Time Edit" sowieso alles darstellen kann: wofür dann der "kastrierte" "TimeEdit", der sich anders verhält, als der "DateEdit"?!
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von Hulk2442 »

Es ist unterteilt damit es leichter in Verwendung ist.
Das gleich könntest du sagen über QDate+QTime & QDateTime die Klassen sind gleich jedoch auch unterschiedlich.
Du benötigst nicht immer den kompletten Overhead von Time wenn du nur Date speicherst und umgekehrt.
Wenn du jedoch beides verwendest hast du gleich alles in einem Objekt zusammen.
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von harry_m »

Jetzt ist das Formular fast fertig und auf der Zielgeraden tauchte ein unerwartetes Problem auf.
Ich berechne die Zeiten und fasse diese im Ergebnis als Bruch zusammen: z.B. "5,3Stunden".

Dieser Wert wird in die SQLite Datenbank als "REAL" geschrieben und muss irgendwann auch dargestellt werden.
Dafür wählte ich ein QLineEdit und verpasste ihm eine Eingabemaske:

Code: Alles auswählen

ui.lineEdit_JobHours->setInputMask("99.99;");
- in der Erwartung, dass dort ein Wert wie 5,30 erscheint...

Tut er auch: nur wird zwischen der "5" und dem Komma (oder auch Punkt: beides ausprobiert) ein Leerzeichen eingefügt.
Ich habe schon alles Denkbare ausprobiert: "09.99" und "00.00" und ein Paar andere auch: das Leerzeichen bleibt. Wieso?

Dabei muss berücksichtigt werden, dass es ein Anzeigefeld ist: sprich der Wert darin wird nicht eingegeben, sondern im Programm berechnet.

Es kann doch nicht sein, dass ich dafür noch ein Validator brauche, oder?
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
harry_m
Beiträge: 74
Registriert: 26. April 2010 23:16

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von harry_m »

Die Lösung ist gefunden...

1. Den Wert der Variablen als qreal mit zwei Stellen nach dem Komma berechnen:

Code: Alles auswählen

    return (tripTo + job_1 + job_2 + job_3 + tripBack)*100/3600/100.0;  
2. Eingabemaske wie folgt zuweisen:

Code: Alles auswählen

        ui.lineEdit_JobHours->setInputMask("xxxxx;");
Und schon sieht es genau so aus, wie ich es mir gewünscht habe.
Zwei Tragödien gibt es im Leben: die eine - nicht zu bekommen, was das Herz wünscht, und die andere: es doch zu bekommen. (Oscar Wilde)
Hulk2442
Beiträge: 115
Registriert: 10. Januar 2007 13:44

Re: QSqlTableModel, Darstellung von Datum und Zeit im Formul

Beitrag von Hulk2442 »

:)
Antworten