From 6b799d87e2915e87cc887ff39886fa47a0f2ad03 Mon Sep 17 00:00:00 2001 From: speillet Date: Wed, 3 Jun 2020 14:13:34 +0200 Subject: [PATCH] fix scientific notation in scale notation that led to wrong interpretation (due to separator character) --- src/app/qgsprojectproperties.cpp | 2 +- src/app/qgsstatusbarscalewidget.cpp | 2 +- src/gui/qgsscalecombobox.cpp | 2 +- tests/src/gui/testqgsscalecombobox.cpp | 29 ++++++++++++++++++++++++++ 4 files changed, 32 insertions(+), 3 deletions(-) diff --git a/src/app/qgsprojectproperties.cpp b/src/app/qgsprojectproperties.cpp index 1692211e40a3..d884607719c4 100644 --- a/src/app/qgsprojectproperties.cpp +++ b/src/app/qgsprojectproperties.cpp @@ -387,7 +387,7 @@ QgsProjectProperties::QgsProjectProperties( QgsMapCanvas *mapCanvas, QWidget *pa { for ( double scale : projectScales ) { - addScaleToScaleList( QStringLiteral( "1:%1" ).arg( scale ) ); + addScaleToScaleList( QStringLiteral( "1:%1" ).arg( QLocale().toString( scale, 'f', 0 ) ) ); } } connect( lstScales, &QListWidget::itemChanged, this, &QgsProjectProperties::scaleItemChanged ); diff --git a/src/app/qgsstatusbarscalewidget.cpp b/src/app/qgsstatusbarscalewidget.cpp index 78fac49c358f..0495de692042 100644 --- a/src/app/qgsstatusbarscalewidget.cpp +++ b/src/app/qgsstatusbarscalewidget.cpp @@ -98,7 +98,7 @@ void QgsStatusBarScaleWidget::updateScales() QStringList textScales; textScales.reserve( scales.size() ); for ( double scale : scales ) - textScales << QStringLiteral( "1:%1" ).arg( scale ); + textScales << QStringLiteral( "1:%1" ).arg( QLocale().toString( scale, 'f', 0 ) ); mScale->updateScales( textScales ); } else diff --git a/src/gui/qgsscalecombobox.cpp b/src/gui/qgsscalecombobox.cpp index 6624512eee98..1d3ed8f02812 100644 --- a/src/gui/qgsscalecombobox.cpp +++ b/src/gui/qgsscalecombobox.cpp @@ -216,7 +216,7 @@ QString QgsScaleComboBox::toString( double scale ) } else { - return QStringLiteral( "1:%1" ).arg( QLocale().toString( static_cast< int >( std::round( scale ) ) ) ); + return QStringLiteral( "1:%1" ).arg( QLocale().toString( static_cast< float >( std::round( scale ) ), 'f', 0 ) ); } } diff --git a/tests/src/gui/testqgsscalecombobox.cpp b/tests/src/gui/testqgsscalecombobox.cpp index e86f44ad9f1b..9e816b32024b 100644 --- a/tests/src/gui/testqgsscalecombobox.cpp +++ b/tests/src/gui/testqgsscalecombobox.cpp @@ -41,6 +41,7 @@ class TestQgsScaleComboBox : public QObject void toString(); void toDouble(); void allowNull(); + void testLocale(); private: void enterScale( const QString &scale ); @@ -256,5 +257,33 @@ void TestQgsScaleComboBox::cleanup() delete s; } +void TestQgsScaleComboBox::testLocale() +{ + QLocale::setDefault( QLocale::English ); + QCOMPARE( s->toString( 1e8 ), QString( "1:100,000,000" ) ); + QLocale customEnglish( QLocale::English ); + customEnglish.setNumberOptions( QLocale::NumberOption::OmitGroupSeparator ); + QLocale::setDefault( customEnglish ); + QCOMPARE( s->toString( 1e8 ), QString( "1:100000000" ) ); + + QLocale::setDefault( QLocale::French ); +#if QT_VERSION >= QT_VERSION_CHECK( 5, 12, 0 ) + QCOMPARE( s->toString( 1e8 ), QString( "1:100 000 000" ) ); +#else + QCOMPARE( s->toString( 1e8 ), QString( "1:100\u00A0000\u00A0000" ) ); +#endif + QLocale customFrench( QLocale::French ); + customFrench.setNumberOptions( QLocale::NumberOption::OmitGroupSeparator ); + QLocale::setDefault( customFrench ); + QCOMPARE( s->toString( 1e8 ), QString( "1:100000000" ) ); + + QLocale::setDefault( QLocale::German ); + QCOMPARE( s->toString( 1e8 ), QString( "1:100.000.000" ) ); + QLocale customGerman( QLocale::German ); + customFrench.setNumberOptions( QLocale::NumberOption::OmitGroupSeparator ); + QLocale::setDefault( customFrench ); + QCOMPARE( s->toString( 1e8 ), QString( "1:100000000" ) ); +} + QGSTEST_MAIN( TestQgsScaleComboBox ) #include "testqgsscalecombobox.moc"