Russian Qt Forum
Ноябрь 22, 2024, 21:18
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Интернационализация, локализация
>
Кириллица в именах ключей QMap и QSettings
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Кириллица в именах ключей QMap и QSettings (Прочитано 10724 раз)
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Кириллица в именах ключей QMap и QSettings
«
:
Август 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
Сообщений: 2921
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #1 :
Август 03, 2011, 10:37 »
И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле?
Записан
Qt 5.11/4.8.7 (X11/Win)
Странник
Гость
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #2 :
Август 03, 2011, 11:52 »
Цитата: GreatSnake от Август 03, 2011, 10:37
И в чём проблемы?
В Qt строки хранятся в юникоде. Какая тебе разница как они будут сохранятся в файле?
ini немножко human-readable формат, мало ли чего человек хочет)
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #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
Сообщений: 984
Надо улыбаться
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #4 :
Август 03, 2011, 15:21 »
Цитата: Гурман от Август 03, 2011, 12:40
Цитировать
ini немножко human-readable формат
это во-1ых, а во-2ых мне не очевидно, как будет работать пара ключ-значение такого вида:
\x41f\x440\x438\x43c\x435\x440=\x441\x442\x440\x43e\x43a\x438
С установленным кодеком значение будет вполне читаемо, ключ - увы.
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #5 :
Август 03, 2011, 15:34 »
на читаемость плевать, ну... почти плевать (на мультиплатформенность не плевать), но не очевидно, что будет вообще работать, увы, сейчас не могу проверить, другим занят
Записан
2^7-1 == 127, задумайтесь...
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #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
Сообщений: 984
Надо улыбаться
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #7 :
Август 03, 2011, 16:10 »
Цитата: Гурман от Август 03, 2011, 15:55
%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
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #8 :
Август 03, 2011, 16:20 »
да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами...
увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить
«
Последнее редактирование: Август 03, 2011, 16:22 от Гурман
»
Записан
2^7-1 == 127, задумайтесь...
Янковский Александр
Гость
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #9 :
Октябрь 25, 2011, 11:11 »
Цитата: Гурман от Август 03, 2011, 16:20
да это все и без подсказки понятно, что можно кодек подвесить... но меня волнует не читабельность внутри INI файла, а полная переносимость между платформами - и ключи, и значения должны восприниматься одинаково, со значениями понятно, это одинаковым кодеком решается, а вот с ключами...
увы, нет сейчас под руками Линукс-машины с установленным Qt, чтобы проверить
интересует схожий вопрос!
Гурман, получилось что-нибудь у Вас?
Записан
Гурман
Гуру общения
Offline
Сообщений: 1442
Qt 2.2, 3.3, 4.5, 4,7, 4.8, 5.3, 5.6, 5.9, 5.12
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #10 :
Февраль 17, 2012, 12:12 »
Занимался другими вещами, сюда не заглядывал, извиняюсь за поздний ответ.
Решение было самым простым - ключи в латинице, для изображения на экране сопровождаются перекодируемым обозначением в кириллице. Это решение более правильное, так как изображение может потребоваться переводить на другой язык, а тогда ключи из иноязычной версии не будут восприняты.
Записан
2^7-1 == 127, задумайтесь...
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #11 :
Февраль 19, 2012, 01:05 »
нахрена пользователю отображать ключи настроек??
Записан
LisandreL
Птица говорун
Offline
Сообщений: 984
Надо улыбаться
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #12 :
Февраль 19, 2012, 11:45 »
Цитата: Авварон от Февраль 19, 2012, 01:05
нахрена пользователю отображать ключи настроек??
Что-то вроде property editor'а. Таблица в 2 столбца. Первый - фиксированное название, второй - редактируемое значение.
Записан
Авварон
Джедай : наставник для всех
Offline
Сообщений: 3260
Re: Кириллица в именах ключей QMap и QSettings
«
Ответ #13 :
Февраль 19, 2012, 12:07 »
Ужас. А поля у вас связанными не бывают?)
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...