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

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

Страниц: [1] 2   Вниз
  Печать  
Автор Тема: QSetting in .ini [РЕШЕНО]  (Прочитано 7173 раз)
МП©
Гость
« : Март 23, 2012, 10:51 »

Записываю - считываю данные float в .ini

читается хорошо, но записывает в таком виде:
Код
C++ (Qt)
F=@Variant(\0\0\0?A\x1e\x66\x66)
 

Записываю так:
Код
C++ (Qt)
float F;
...
F= ui->lineEdit->text().toFloat();
....
settings.setValue("F",F);
 

Если записываю как строку:
Код
C++ (Qt)
QString F;
...
F= ui->lineEdit->text().toString();
....
settings.setValue("F",F);
 
то записывается как надо, например F=9.9
но подозреваю, что не по феншую так делать.

Подскажите, пожалуйста в чем может быть проблема использования float?
« Последнее редактирование: Март 23, 2012, 14:03 от МП© » Записан
mutineer
Гость
« Ответ #1 : Март 23, 2012, 11:40 »

читает из .ini нормально? если нормально, то в чем вообще проблема? Qt удобнее хранить в таком виде. Или ты планируешь чем-то не-Qt менять этот файл?
Записан
МП©
Гость
« Ответ #2 : Март 23, 2012, 11:59 »

читает из ini нормально, а вот записывать float отказывается, точнее записывает но в формате @Variant(\0\0\0?A\x1e\x66\x66).
значение int записывает как надо, string Тоже норм.

если бы требовалось только записать число 9.9, то я бы использовал QString, но потребуются некоторые вычисления с float.

Использоваться будет только в Qt, но возможно потребуется вручную менять ini файл
Записан
mutineer
Гость
« Ответ #3 : Март 23, 2012, 12:01 »

читает из ini нормально, а вот записывать float отказывается, точнее записывает но в формате @Variant(\0\0\0?A\x1e\x66\x66).

вот записало оно float в этом странном формате. Обратно его считывает?
Записан
V1KT0P
Гость
« Ответ #4 : Март 23, 2012, 12:22 »

читает из ini нормально, а вот записывать float отказывается, точнее записывает но в формате @Variant(\0\0\0?A\x1e\x66\x66).
значение int записывает как надо, string Тоже норм.

если бы требовалось только записать число 9.9, то я бы использовал QString, но потребуются некоторые вычисления с float.

Использоваться будет только в Qt, но возможно потребуется вручную менять ini файл

Ну так записывай так:
Код:
settings.setValue("F",QString::number(F, 'f', 6));
А считывай так:
Код:
F = settings.value("F").toFloat();
Вроде должно работать как ты хочешь.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #5 : Март 23, 2012, 12:35 »

Вроде должно работать как ты хочешь.
Работать будет при условии что у писавшего и читающего будут одинаковые локали.
В случае с QVariant работать будет всегда.
Записан

Qt 5.11/4.8.7 (X11/Win)
V1KT0P
Гость
« Ответ #6 : Март 23, 2012, 12:48 »

Вроде должно работать как ты хочешь.
Работать будет при условии что у писавшего и читающего будут одинаковые локали.
В случае с QVariant работать будет всегда.
Да, всегда но вот тогда вручную конфиг будет затруднительно изменить. А так все что можно в UTF-8 и нет проблем.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #7 : Март 23, 2012, 13:00 »

Да, всегда но вот тогда вручную конфиг будет затруднительно изменить. А так все что можно в UTF-8 и нет проблем.
А причём здесь кодировка? Имеется в виду, что в одних локалях используется точка, а в других запятая.
Записан

Qt 5.11/4.8.7 (X11/Win)
V1KT0P
Гость
« Ответ #8 : Март 23, 2012, 13:05 »

Да, всегда но вот тогда вручную конфиг будет затруднительно изменить. А так все что можно в UTF-8 и нет проблем.
А причём здесь кодировка? Имеется в виду, что в одних локалях используется точка, а в других запятая.
Только что проверил, QString-у плевать, что точка что запятая одинаково преобразовывает.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #9 : Март 23, 2012, 13:23 »

Только что проверил, QString-у плевать, что точка что запятая одинаково преобразовывает.
Ню-ню) А теперь выстави "C" локаль и посмотри как QString подавится на запятой.
Записан

Qt 5.11/4.8.7 (X11/Win)
МП©
Гость
« Ответ #10 : Март 23, 2012, 14:03 »

вот записало оно float в этом странном формате. Обратно его считывает?
считывает правильно.

Ну так записывай так:
Код:
settings.setValue("F",QString::number(F, 'f', 6));
Помогло получить то что нужно:) Спасибо огромное!!:)
Записан
V1KT0P
Гость
« Ответ #11 : Март 23, 2012, 14:37 »

Только что проверил, QString-у плевать, что точка что запятая одинаково преобразовывает.
Ню-ню) А теперь выстави "C" локаль и посмотри как QString подавится на запятой.
Тогда можно добавить замену разделителя на тот что является текущим в локали.
Записан
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #12 : Март 23, 2012, 14:48 »

Ну и чего спешишь? Ведь решил-то не совсем верно.
Если хочешь, чтобы читалось всегда и везде, делай используя QLocale:
запись:
Код
C++ (Qt)
settings.setValue("F",QLocale::c().toString(F, 'f', 6));
чтение:
Код
C++ (Qt)
F = QLocale::c().toFloat(settings.value("F").toString());
Записан

Qt 5.11/4.8.7 (X11/Win)
GreatSnake
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2921



Просмотр профиля
« Ответ #13 : Март 23, 2012, 14:49 »

Тогда можно добавить замену разделителя на тот что является текущим в локали.
А теперь вопрос: как средствами Qt его узнать?
Записан

Qt 5.11/4.8.7 (X11/Win)
V1KT0P
Гость
« Ответ #14 : Март 23, 2012, 14:53 »

Тогда можно добавить замену разделителя на тот что является текущим в локали.
А теперь вопрос: как средствами Qt его узнать?
Код
C++ (Qt)
QChar QLocale::decimalPoint () const
Записан
Страниц: [1] 2   Вверх
  Печать  
 
Перейти в:  


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