Название: Кириллица в именах ключей QMap и QSettings Отправлено: Гурман от Август 02, 2011, 23:47 Сделал хранение настроек загружаемых плагинов в соответствующих им QVariantMap, из которых собственно сохранение производится переносом пар в QSettings и дальше sync(). Все работает, но очень хочется, чтобы наименования настроек (то есть, ключи) хранились в национальном алфавите. А тут не знаю, насколько это будет корректно работать в QVariantMap и QSettings. Как я вижу, QSettings кириллицу сохраняет в файл шестнадцатеричных кодах. Не очевидно, что её можно в названиях ключей использовать.
Кто-нибудь делал что-то подобное? Если нельзя ключи по-русски хранить и обрабатывать, то придется городить параллельный QMap<QString key, QString cyrillic_name>, это выглядит самым простым решением. Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: GreatSnake от Август 03, 2011, 10:37 И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле? Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Странник от Август 03, 2011, 11:52 И в чём проблемы? ini немножко human-readable формат, мало ли чего человек хочет)В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле? Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Гурман от Август 03, 2011, 12:40 Цитировать ini немножко human-readable формат это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида: \x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438 Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: LisandreL от Август 03, 2011, 15:21 Цитировать ini немножко human-readable формат это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида: \x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438 Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Гурман от Август 03, 2011, 15:34 на читаемость плевать, ну... почти плевать (на мультиплатформенность не плевать), но не очевидно, что будет вообще работать, увы, сейчас не могу проверить, другим занят
Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Гурман от Август 03, 2011, 15:55 проверил - пары ключ-значение с кириллицей в имени ключа, и в значении, обе передаются через tr() сохраняет в виде:
%U0441%U0442%U0440%U043E%U043A%U0430%20%U0441%20%U043D%U0430%U0441%U0442%U0440%U043E%U0439%U043A%U043E%U0439=\x41f\x440\x438\x43c\x435\x440 \x441\x442\x440\x43e\x43a\x438 тем не менее, это работает, это уже хоть кое-что однако все-таки, читабельность хотелось бы, хотя не обязательно вот что обязательно - файлы настроек должны восприниматься одинаково на разных платформах win и lin... то есть, настройка с одной платформы должна также восприниматься на другой платформе - то есть, значение надо в юникоде сохранить, а ключ уже в нем или я не прав? Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: LisandreL от Август 03, 2011, 16:10 %U0441%U0442%U0440%U043E%U043A%U0430%20%U0441%20%U043D%U0430%U0441%U0442%U0440%U043E%U0439%U043A%U043E%U0439=\x41f\x440\x438\x43c\x435\x440 \x441\x442\x440\x43e\x43a\x438 QTextCodec::setCodecForCStrings(QTextCodec::codecForName("utf8")); QSettings settings("ini.ini", QSettings::IniFormat); settings.setIniCodec( "utf8" ); settings.setValue( QString( "Раз" ), QString( "И появляется солнце" ) ); Код
Для QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251")); QSettings settings("ini.ini", QSettings::IniFormat); settings.setIniCodec( "utf8" ); settings.setValue( QString( "Раз" ), QString( "И появляется солнце" ) ); результат аналогичный. Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Гурман от Август 03, 2011, 16:20 да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами... :-\ увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить
Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Янковский Александр от Октябрь 25, 2011, 11:11 да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами... :-\ увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить интересует схожий вопрос! Гурман, получилось что-нибудь у Вас? Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Гурман от Февраль 17, 2012, 12:12 Занимался другими вещами, сюда не заглядывал, извиняюсь за поздний ответ.
Решение было самым простым - ключи в латинице, для изображения на экране сопровождаются перекодируемым обозначением в кириллице. Это решение более правильное, так как изображение может потребоваться переводить на другой язык, а тогда ключи из иноязычной версии не будут восприняты. Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Авварон от Февраль 19, 2012, 01:05 нахрена пользователю отображать ключи настроек??
Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: LisandreL от Февраль 19, 2012, 11:45 нахрена пользователю отображать ключи настроек?? Что-то вроде property editor'а. Таблица в 2 столбца. Первый - фиксированное название, второй - редактируемое значение.Название: Re: Кириллица в именах ключей QMap и QSettings Отправлено: Авварон от Февраль 19, 2012, 12:07 Ужас. А поля у вас связанными не бывают?)
|