Название: Зачем QSettings сортирует ключи? Отправлено: SABROG от Февраль 13, 2010, 15:35 Столкнулся с неприятной особенностью. В ini файле разместил секции в порядке удобном для меня, для того чтобы названиями секций заполнить QComboBox. И оказалось, что как не указывай:
Код
или Код
Метод QSettings::childGroups() всегда выдает отсортированный список такой последовательности: "Moscow", "Saratov" Вопрос можно решить введением дополнительного ключа сортировки, но это конечно костыль уже. Название: Re: Зачем QSettings сортирует ключи? Отправлено: lit-uriy от Февраль 13, 2010, 15:57 Цитировать Зачем QSettings сортирует ключи? Сортирует QMap, в который они засовываются внутри QSettingsА ты ещё попробуй такие группы сделать: [Goup-1] [Goup-2] ... [Goup-9] [Goup-10] в результате получишь вот так: [Goup-1] [Goup-10] [Goup-2] ... [Goup-9] Ладно бы он их по человечески сортировал, дак ведь там ещё алгоритм сортировки основанный исключительно на тексте. Название: Re: Зачем QSettings сортирует ключи? Отправлено: asvil от Февраль 13, 2010, 15:59 Видимо внутри используется QMap, который сортирует по значению bool operator < (const QString&, const QString&).
Название: Re: Зачем QSettings сортирует ключи? Отправлено: niXman от Февраль 13, 2010, 17:25 глянул исходники QSettings. оказывается очень просто сие чудо исправить, используя unordered_map<>
в gcc, начиная с версии 4.4.0, хидер зовется unordered_map или же бустовский хидер boost/unordered_map.hpp Название: Re: Зачем QSettings сортирует ключи? Отправлено: SABROG от Февраль 13, 2010, 18:10 глянул исходники QSettings. оказывается очень просто сие чудо исправить, используя unordered_map<> в gcc, начиная с версии 4.4.0, хидер зовется unordered_map или же бустовский хидер boost/unordered_map.hpp Для этого придется исправить исходники Qt? Название: Re: Зачем QSettings сортирует ключи? Отправлено: niXman от Февраль 13, 2010, 18:30 конечно, стандартный QMap не умеет хранить ключи неотсортироваными.
кратко глянув, в первую очередь я бы заменил строку 190 в файле src/corelib/io/qsettings.h Код на: Код предварительно подключив хидер. Название: Re: Зачем QSettings сортирует ключи? Отправлено: lit-uriy от Февраль 13, 2010, 19:12 а я бы на QHash заменил. Ничего не сортирует и работает быстрее.
Название: Re: Зачем QSettings сортирует ключи? Отправлено: Kolobok от Февраль 14, 2010, 14:49 А чем поможет QHash в этом случае. Он тоже возвращает ключи не в том порядке, в котором они были вставлены.
Название: Re: Зачем QSettings сортирует ключи? Отправлено: break от Февраль 14, 2010, 17:26 Цитировать В ini файле разместил секции в порядке удобном для меня Ну а разве INI файл сам предусматривает порядок сортировки (есть именнованная секция, и есть параметры внутри нее - никакой очередности...)? А QSettings создавался чтобы вытянуть нужные настройки - обычно для этого не требуется оригинальный порядок, просто программа сама в нужной очередности тянет нужный параметр.Может сохраните свой список в XML. Там порядок нодов сохраняется таким каким был при записи/чтение. Название: Re: Зачем QSettings сортирует ключи? Отправлено: SABROG от Февраль 15, 2010, 00:21 Да вариантов куча как можно сделать. Это даже не вопрос, я просто поделился с чем столкнулся. Изначально грешил на QComboBox и его политику вставки новых элементов. Убил на это минут 30 пока разобрался что происходит. Может сама мысль о возможности подобного поведения у людей в голове останется на будущее.
|