Russian Qt Forum

Qt => Общие вопросы => Тема начата: МП© от Март 23, 2012, 10:51



Название: QSetting in .ini [РЕШЕНО]
Отправлено: МП© от Март 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?


Название: Re: QSetting in .ini
Отправлено: mutineer от Март 23, 2012, 11:40
читает из .ini нормально? если нормально, то в чем вообще проблема? Qt удобнее хранить в таком виде. Или ты планируешь чем-то не-Qt менять этот файл?


Название: Re: QSetting in .ini
Отправлено: МП© от Март 23, 2012, 11:59
читает из ini нормально, а вот записывать float отказывается, точнее записывает но в формате @Variant(\0\0\0?A\x1e\x66\x66).
значение int записывает как надо, string Тоже норм.

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

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


Название: Re: QSetting in .ini
Отправлено: mutineer от Март 23, 2012, 12:01
читает из ini нормально, а вот записывать float отказывается, точнее записывает но в формате @Variant(\0\0\0?A\x1e\x66\x66).

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


Название: Re: QSetting in .ini
Отправлено: V1KT0P от Март 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();
Вроде должно работать как ты хочешь.


Название: Re: QSetting in .ini
Отправлено: GreatSnake от Март 23, 2012, 12:35
Вроде должно работать как ты хочешь.
Работать будет при условии что у писавшего и читающего будут одинаковые локали.
В случае с QVariant работать будет всегда.


Название: Re: QSetting in .ini
Отправлено: V1KT0P от Март 23, 2012, 12:48
Вроде должно работать как ты хочешь.
Работать будет при условии что у писавшего и читающего будут одинаковые локали.
В случае с QVariant работать будет всегда.
Да, всегда но вот тогда вручную конфиг будет затруднительно изменить. А так все что можно в UTF-8 и нет проблем.


Название: Re: QSetting in .ini
Отправлено: GreatSnake от Март 23, 2012, 13:00
Да, всегда но вот тогда вручную конфиг будет затруднительно изменить. А так все что можно в UTF-8 и нет проблем.
А причём здесь кодировка? Имеется в виду, что в одних локалях используется точка, а в других запятая.


Название: Re: QSetting in .ini
Отправлено: V1KT0P от Март 23, 2012, 13:05
Да, всегда но вот тогда вручную конфиг будет затруднительно изменить. А так все что можно в UTF-8 и нет проблем.
А причём здесь кодировка? Имеется в виду, что в одних локалях используется точка, а в других запятая.
Только что проверил, QString-у плевать, что точка что запятая одинаково преобразовывает.


Название: Re: QSetting in .ini
Отправлено: GreatSnake от Март 23, 2012, 13:23
Только что проверил, QString-у плевать, что точка что запятая одинаково преобразовывает.
Ню-ню) А теперь выстави "C" локаль и посмотри как QString подавится на запятой.


Название: Re: QSetting in .ini
Отправлено: МП© от Март 23, 2012, 14:03
вот записало оно float в этом странном формате. Обратно его считывает?
считывает правильно.

Ну так записывай так:
Код:
settings.setValue("F",QString::number(F, 'f', 6));
Помогло получить то что нужно:) Спасибо огромное!!:)


Название: Re: QSetting in .ini
Отправлено: V1KT0P от Март 23, 2012, 14:37
Только что проверил, QString-у плевать, что точка что запятая одинаково преобразовывает.
Ню-ню) А теперь выстави "C" локаль и посмотри как QString подавится на запятой.
Тогда можно добавить замену разделителя на тот что является текущим в локали.


Название: Re: QSetting in .ini [РЕШЕНО]
Отправлено: GreatSnake от Март 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());


Название: Re: QSetting in .ini
Отправлено: GreatSnake от Март 23, 2012, 14:49
Тогда можно добавить замену разделителя на тот что является текущим в локали.
А теперь вопрос: как средствами Qt его узнать?


Название: Re: QSetting in .ini
Отправлено: V1KT0P от Март 23, 2012, 14:53
Тогда можно добавить замену разделителя на тот что является текущим в локали.
А теперь вопрос: как средствами Qt его узнать?
Код
C++ (Qt)
QChar QLocale::decimalPoint () const


Название: Re: QSetting in .ini
Отправлено: GreatSnake от Март 23, 2012, 15:04
Тогда можно добавить замену разделителя на тот что является текущим в локали.
А теперь вопрос: как средствами Qt его узнать?
Код
C++ (Qt)
QChar QLocale::decimalPoint () const
Да, точно есть.
Я просто тоже когда-то с этим возился и мне очень не хватало QLocale::setDecimalPoint(), т.к. постоянная замена разделителя, имхо, моветон.