Qt4 QSettings сохраняет значение перечисления (например, Qt :: CheckState) - PullRequest
3 голосов
/ 20 января 2010

Я хочу сохранить состояние QCheckBok в QSetting, я могу привести его значение к int, но, возможно, существует более простой и правильный способ сделать это?

вот мой код:

QSetting setting;
Qt::CheckState checkState;
//...
checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();
//...
setting.setValue("checkState", (uint)checkState);
setting.sync();

1 Ответ

3 голосов
/ 22 января 2010

Во-первых, старайтесь избегать бросков в стиле C. Например, замените следующую строку:

checkState = (Qt::CheckState)setting.value("checkState", Qt::Unchecked).toUInt();

с этим:

checkState = static_cast<Qt::CheckState>(setting.value("checkState", Qt::Unchecked).toUint());

Строка, в которой вы разыгрываете checkState в uint, также должна быть изменена.

Во-вторых, QSettings использует QVariant для установки и получения значений. QVariant обычно можно расширить для поддержки дополнительных типов с помощью макроса Q_DECLARE_METATYPE. Вот документация:

http://doc.trolltech.com/4.6/qmetatype.html#Q_DECLARE_METATYPE

Однако этот механизм не работает должным образом с перечислениями (когда вы вызываете функцию-член value() в QVariant). Так что то, что у вас есть сейчас (за исключением кастинга в стиле C), прекрасно.

...