Seite 1 von 1

Komma als Dezimalseparor Qt4 nach Qt5

Verfasst: 2. März 2015 15:40
von AlexDu
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

Re: Komma als Dezimalseparor Qt4 nach Qt5

Verfasst: 2. März 2015 16:26
von Christian81
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

Re: Komma als Dezimalseparor Qt4 nach Qt5

Verfasst: 2. März 2015 20:12
von AlexDu
Mit dem QLocale hab ich schon rumprobiert. Bei mir klappt das irgendwie nicht.

Code: Alles auswählen

        QLocale::setDefault(QLocale::German);
        QString sTest = "1.5";
        double dTest = sTest.toDouble();
        qDebug() << "Test: " << dTest;
ergibt 1.5
Mit sTest "1,5" wird 0 zurückgegeben.
Da war ich wohl etwas voreilig mit der Umstellung auf Qt5.

Gruß Alex

Re: Komma als Dezimalseparor Qt4 nach Qt5

Verfasst: 3. März 2015 06:49
von Christian81
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?

Re: Komma als Dezimalseparor Qt4 nach Qt5

Verfasst: 3. März 2015 07:58
von AlexDu
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)
Unlike QString::toDouble(), this function does not fall back to the "C" locale if the string cannot be interpreted in this locale.
so interpretiere, das es mit QString::toDouble noch funktionieren sollte.

Dann muss ich mich wohl ran machen und den ganzen Code durchforsten.

Gruß Alex

Edit: Ach ja, ich benutze die Version 5.4