Guten Tag,
ich habe ein Projekt von Qt4.8 nach Qt5.4 umgestellt. Ein Problem ist übrig geblieben und ich habe dazu auch nichts in diversen Migrationshilfen gefunden.
Unter Qt4.8 und davor wurden alle Eingaben, sowohl in QLineEdit als auch in QTableView, problemlos mit .toDouble() in double umgewandelt. Egal ob ein Komma oder ein Punkt als Dezimalseparator eingegeben wurde. In Qt5 wird nur der Punkt akzeptiert.
Kann ich das alte Verhalten wieder herstellen, ohne alle Eingaben vom Programm überprüfen zu lasssen?
Viele Grüße
Alex
Komma als Dezimalseparor Qt4 nach Qt5
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Komma als Dezimalseparor Qt4 nach Qt5
Warum es in Qt4 ging kann ich nicht genau erklären - ggf. war dort die Locale anders.
Bei QString::toDouble() wird immer die Locale mit beachtet: http://qt-project.org/doc/qt-4.8/qstring.html#toDouble
Wenn die Locale also auf Deutsch eingestellt ist, sollte auch ',' als Separator akzeptiert werden.
Achtung: QByteArray kümmert sich übrigens nicht um die Locale
Bei QString::toDouble() wird immer die Locale mit beachtet: http://qt-project.org/doc/qt-4.8/qstring.html#toDouble
Wenn die Locale also auf Deutsch eingestellt ist, sollte auch ',' als Separator akzeptiert werden.
Achtung: QByteArray kümmert sich übrigens nicht um die Locale
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Komma als Dezimalseparor Qt4 nach Qt5
Mit dem QLocale hab ich schon rumprobiert. Bei mir klappt das irgendwie nicht.
ergibt 1.5
Mit sTest "1,5" wird 0 zurückgegeben.
Da war ich wohl etwas voreilig mit der Umstellung auf Qt5.
Gruß Alex
Code: Alles auswählen
QLocale::setDefault(QLocale::German);
QString sTest = "1.5";
double dTest = sTest.toDouble();
qDebug() << "Test: " << dTest;
Mit sTest "1,5" wird 0 zurückgegeben.
Da war ich wohl etwas voreilig mit der Umstellung auf Qt5.
Gruß Alex
-
Christian81
- Beiträge: 7319
- Registriert: 26. August 2004 14:11
- Wohnort: Bremen
- Kontaktdaten:
Re: Komma als Dezimalseparor Qt4 nach Qt5
Sollte aber gehen, siehe http://doc.qt.io/qt-5/qlocale.html#toDouble
Bitte mal testen, ansonsten Bugreport an Qt. Welche Qt-Version benutzt Du?
Bitte mal testen, ansonsten Bugreport an Qt. Welche Qt-Version benutzt Du?
MfG Christian
'Funktioniert nicht' ist keine Fehlerbeschreibung
'Funktioniert nicht' ist keine Fehlerbeschreibung
Re: Komma als Dezimalseparor Qt4 nach Qt5
Danke Christian,
Du hast recht, wenn ich QLocale::toDouble benutze wird das Komma als Dezimalseperator akzeptiert. Leider wird dann der Punkt nicht mehr akzeptiert.
Obwohl ich den Satz (über dem Beispiel aus Deinem Link)
Dann muss ich mich wohl ran machen und den ganzen Code durchforsten.
Gruß Alex
Edit: Ach ja, ich benutze die Version 5.4
Du hast recht, wenn ich QLocale::toDouble benutze wird das Komma als Dezimalseperator akzeptiert. Leider wird dann der Punkt nicht mehr akzeptiert.
Obwohl ich den Satz (über dem Beispiel aus Deinem Link)
so interpretiere, das es mit QString::toDouble noch funktionieren sollte.Unlike QString::toDouble(), this function does not fall back to the "C" locale if the string cannot be interpreted in this locale.
Dann muss ich mich wohl ran machen und den ganzen Code durchforsten.
Gruß Alex
Edit: Ach ja, ich benutze die Version 5.4