Используем QSettings для хранения настроек приложения Qt

Решили сделать так, чтобы ваше приложение сохраняло свои настройки в ходе работы и использовало их в дальнейшем? Я предлагаю научится это делать при помощи консольного Qt приложения...

Создадим его в Qt Creator..
Перед использованием необходимо подключить библиотеку QSettings:

#include <QSettings>

Теперь можно создать объект настроек Qt:

QSettings *settings = new QSettings("settings.conf",QSettings::NativeFormat);

В качестве параметров указывается имя файла с настройками и их формат. Возможны также такие варианты:

QSettings ( const QString & organization, const QString & application = QString(), QObject * parent = 0 )
QSettings ( Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0 )
QSettings ( Format format, Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0 )
QSettings ( const QString & fileName, Format format, QObject * parent = 0 )

В нашем случае используется последний вариант.

QSettings::NativeFormat - самый "удобный" вариант хранения настроек. Для Windows - реестр, unix - текстовый файл...
QSettings::IniFormat - хранить в файле ini.

Я использую linux, так что хранить настройки в текстовом файле, считаю приемлемым вариантом...
Теперь посмотрим как добавлять и читать настройки.
Для установки настроек используется метод setValue:

settings->setValue("section/size", value);

Таким образом будет установлен такой синтаксис файла настроек:

[section]
size=value

Как видите до знака "/" указывается секция, а после него параметр и значение..
Для записи настроек в файл:

settings->sync();

Для считывания вам понадобится открыть создать объект с настройками по вышеуказанному методу и воспользоваться методом value:

settings->value("section/size");

Будет возвращено значение из файла настроек. Возможен также вариант со стандартным значением:

settings->value("section/size", default);

Таким образом, если значение не установлено в файле настроек, будет возвращён default.
Для примера можно создать вот такую программу:

#include <QtCore/QCoreApplication>
#include <QSettings>
#include <QDebug>

int main(int argc, char *argv[]){
    QCoreApplication a(argc, argv);

    QSettings *settings = new QSettings("settings.conf",QSettings::NativeFormat);
    settings->setValue("settings/value1",1);  //устанавливаем значение value=1
    settings->sync(); //записываем настройки

    /* открываем файл с настройками для считывания */
    QSettings *settings2 = new QSettings("settings.conf",QSettings::NativeFormat);
    qDebug() << settings2->value("settings/value1",5).toInt();  //выводим на экран настройки из файла, если там ничего нет - 5
    return a.exec();
}

Будет сгенерирован следующий файл настроек:

[settings]
value1=1

В нашем случае будет выведено значение  - 1
На этом всё..

Просмотров:   22724

Комментарии

чт, 11/22/2012 - 14:10

Спасибо! Коротенько и предельно ясно.

ср, 12/25/2013 - 12:56
Dexel

Здравствуйте. У меня значения пишутся в файл без sync(), т.е. по setValue()
4.8 версия QT.
Объясните?

ср, 12/25/2013 - 23:37

Вот что пишут в справке:

If there already exists a setting with the same key, the existing value is overwritten by the new value. For efficiency, the changes may not be saved to permanent storage immediately. (You can always call sync() to commit your changes.)

Если уже есть настройка с таким же именем, то при вызове setValue() она будет перезаписана. Но запись может произойти не сразу из соображений производительности. А вот при вызове sync() данные будут точно записаны.

Добавить комментарий

Plain text

  • HTML-теги не обрабатываются и показываются как обычный текст
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Строки и параграфы переносятся автоматически.
CAPTCHA
Введи эти символы. Ато роботы одолели!