Почему QString :: localeAwareCompare () не работает правильно - PullRequest
2 голосов
/ 23 сентября 2010

Финский клиент говорит мне, что правильная (с учетом локали) сортировка для финского языка: az, å, ä, ö.

Но QString :: localeAwareCompare () возвращает его как: a, ä, å, bo, ö, pz в Qt 4.4.2 в Windows Vista.

#include <qapplication.h>
#include <qlocale.h>
#include <iostream>
#include <tchar.h>

int
main( int argc, char* argv[] )
{
    QLocale::setDefault ( QLocale( QLocale::Finnish ) );

    QApplication app( argc, argv );    

    QString s1 = "a";
    QString s2 = "ä";
    QString s3 = "å";
    QString s4 = "b";
    QString s5 = "o";
    QString s6 = "ö";
    QString s7 = "z";

    std::cout << "QString::localeAwareCompare( s1, s2 )=" << QString::localeAwareCompare( s1, s2 ) << "\n";
    std::cout << "QString::localeAwareCompare( s2, s3 )=" << QString::localeAwareCompare( s2, s3 ) << "\n";
    std::cout << "QString::localeAwareCompare( s3, s4 )=" << QString::localeAwareCompare( s3, s4 ) << "\n";
    std::cout << "QString::localeAwareCompare( s4, s5 )=" << QString::localeAwareCompare( s4, s5 ) << "\n";
    std::cout << "QString::localeAwareCompare( s5, s6 )=" << QString::localeAwareCompare( s5, s6 ) << "\n";
    std::cout << "QString::localeAwareCompare( s5, s6 )=" << QString::localeAwareCompare( s6, s7 ) << "\n";

    return app.exec();
}

Выводы:

QString::localeAwareCompare( s1, s2 )=-1
QString::localeAwareCompare( s2, s3 )=-1
QString::localeAwareCompare( s3, s4 )=-1
QString::localeAwareCompare( s4, s5 )=-1
QString::localeAwareCompare( s5, s6 )=-1
QString::localeAwareCompare( s5, s6 )=-1

Мой финский клиент получает тот же результат.Это ошибка или я что-то не так делаю?

1 Ответ

3 голосов
/ 23 сентября 2010

Я протестировал ваш код в Qt 4.6.2 в Windows XP, и эти символы отсортированы правильно.С вашим тестом я получаю следующий вывод:

QString::localeAwareCompare( s1, s2 )=-1
QString::localeAwareCompare( s2, s3 )=1
QString::localeAwareCompare( s3, s4 )=1
QString::localeAwareCompare( s4, s5 )=-1
QString::localeAwareCompare( s5, s6 )=-1
QString::localeAwareCompare( s5, s6 )=1

И, как финн, я могу подтвердить, что ваш клиент прав в отношении финского заказа на сортировку.

Так, может быть, вы могли бы перейти на новую версию Qt?

...