Russian Qt Forum
Ноябрь 22, 2024, 20:37 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Кириллица в именах ключей QMap и QSettings  (Прочитано 10711 раз)
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« : Август 02, 2011, 23:47 »

Сделал хранение настроек загружаемых плагинов в соответствующих им QVariantMap, из которых собственно сохранение производится переносом пар в QSettings и дальше sync(). Все работает, но очень хочется, чтобы наименования настроек (то есть, ключи) хранились в национальном алфавите. А тут не знаю, насколько это будет корректно работать в QVariantMap и QSettings. Как я вижу, QSettings кириллицу сохраняет в файл шестнадцатеричных кодах. Не очевидно, что её можно в названиях ключей использовать.

Кто-нибудь делал что-то подобное? Если нельзя ключи по-русски хранить и обрабатывать, то придется городить параллельный QMap<QString key, QString cyrillic_name>, это выглядит самым простым решением.
« Последнее редактирование: Август 02, 2011, 23:59 от Гурман » Записан

2^7-1 == 127, задумайтесь...
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #1 : Август 03, 2011, 10:37 »

И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле?
Записан

Qt 5.11/4.8.7 (X11/Win)
Странник
Гость
« Ответ #2 : Август 03, 2011, 11:52 »

И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле?
ini немножко human-readable формат, мало ли чего человек хочет)
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #3 : Август 03, 2011, 12:40 »

Цитировать
ini немножко human-readable формат

это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида:

\x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438
Записан

2^7-1 == 127, задумайтесь...
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #4 : Август 03, 2011, 15:21 »

Цитировать
ini немножко human-readable формат

это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида:

\x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438

С установленным кодеком значение будет вполне читаемо, ключ - увы.
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #5 : Август 03, 2011, 15:34 »

на читаемость плевать, ну... почти плевать (на мультиплатформенность не плевать), но не очевидно, что будет вообще работать, увы, сейчас не могу проверить, другим занят
Записан

2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #6 : Август 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... то есть, настройка с одной платформы должна также восприниматься на другой платформе - то есть, значение надо в юникоде сохранить, а ключ уже в нем

или я не прав?


Записан

2^7-1 == 127, задумайтесь...
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #7 : Август 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( "И появляется солнце" ) );

Код
INI
[General]
%U0420%U0430%U0437=И появляется солнце

Для
    QTextCodec::setCodecForCStrings(QTextCodec::codecForName("cp1251"));
    QSettings settings("ini.ini", QSettings::IniFormat);
    settings.setIniCodec( "utf8" );
    settings.setValue( QString( "Раз" ), QString( "И появляется солнце" ) );
результат аналогичный.
« Последнее редактирование: Август 03, 2011, 16:17 от LisandreL » Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #8 : Август 03, 2011, 16:20 »

да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами...  В замешательстве увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить
« Последнее редактирование: Август 03, 2011, 16:22 от Гурман » Записан

2^7-1 == 127, задумайтесь...
Янковский Александр
Гость
« Ответ #9 : Октябрь 25, 2011, 11:11 »

да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами...  В замешательстве увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить


интересует схожий вопрос!
Гурман, получилось что-нибудь у Вас?
Записан
Гурман
Гуру общения
******
Offline Offline

Сообщений: 1442

Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12


Просмотр профиля
« Ответ #10 : Февраль 17, 2012, 12:12 »

Занимался другими вещами, сюда не заглядывал, извиняюсь за поздний ответ.

Решение было самым простым - ключи в латинице, для изображения на экране сопровождаются перекодируемым обозначением в кириллице. Это решение более правильное, так как изображение может потребоваться переводить на другой язык, а тогда ключи из иноязычной версии не будут восприняты.
Записан

2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #11 : Февраль 19, 2012, 01:05 »

нахрена пользователю отображать ключи настроек??
Записан
LisandreL
Птица говорун
*****
Offline Offline

Сообщений: 984


Надо улыбаться


Просмотр профиля
« Ответ #12 : Февраль 19, 2012, 11:45 »

нахрена пользователю отображать ключи настроек??
Что-то вроде property editor'а. Таблица в 2 столбца. Первый - фиксированное название, второй - редактируемое значение.
Записан
Авварон
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 3260


Просмотр профиля
« Ответ #13 : Февраль 19, 2012, 12:07 »

Ужас. А поля у вас связанными не бывают?)
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.087 секунд. Запросов: 23.