Russian Qt Forum

Qt => Вопросы новичков => Тема начата: Hoksmur от Июнь 18, 2013, 09:15



Название: работа с enum в QSettings
Отправлено: Hoksmur от Июнь 18, 2013, 09:15
 Доброго дня.
Не могу победить сохранение/восстановление настроек через QSettings
надо сохранить установки QAudioFormat, но там есть два enum - SampleType и Endian
 То есть такие строки (в простейшем случае) не работают.
Код:
QAudioFormat settings;
.....
inifile->setValue("device/sampletype", settings.SampleType);
....
settings.setSampleType(inifile->value("device/sampletype", 1));
Как бы попроще реализовать? static_cast читал, но просветления не наступило.
Это не значит, что не подходит - не разобрался. Если можно бы - с примером или ссылкой.


Название: Re: работа с enum в QSettings
Отправлено: Hellraiser от Июнь 18, 2013, 09:50
Код:
inifile->setValue("device/sampletype", settings.sampleType());
settings.setSampleType(static_cast<QAudioFormat::SampleType>(inifile->value("device/sampletype", 1).toInt()));
Это не Qt виноват, а пробелы в знаниях C++. Можно почитать, хотя бы, Брюса Эккеля (1-й том), в сети он есть.


Название: Re: работа с enum в QSettings
Отправлено: Hoksmur от Июнь 18, 2013, 10:00
 Огромное спасибо!
В C++ новичёк, как то на Си больше для Embedded писал до этого. Проверьте правильность понимания, если не сложно:
.toInt() - преобразует в целое выражение до него, а static_cast<QAudioFormat::SampleType> - к требуемому набору значений перед записью в структуру/поле/...
 Я так пробовал:
Код:
inifile->setValue("device/sampletype", static_cast<int>(settings.SampleType));
settings.setSampleType(inifile->value("device/sampletype", static_cast<int>(1));
На запинывайте сильно, теперь и сам вижу.


Название: Re: работа с enum в QSettings
Отправлено: kambala от Июнь 18, 2013, 10:51
static_cast<int>(value) аналогичен сишному (int)value, но предпочтительнее


Название: Re: работа с enum в QSettings
Отправлено: lit-uriy от Июнь 18, 2013, 10:57
>>.toInt() - преобразует в целое выражение до него
терминология Визуалбейсиковская, не верная.
функция QSettings::value() возвращает тип QVariant, а у него есть функция toInt() (http://www.doc.crossplatform.ru/qt/4.6.x/qvariant.html#toInt)

>>а static_cast<QAudioFormat::SampleType> - к требуемому набору значений
просто приводит тип Целое (int) к типу QAudioFormat::SampleType