Оглавление
Описание класса QSettingsКласс QSettings предоставляет постоянные платформонезависимые настройки приложения. Далее... #include <QSettings> Унаследован от: QObject. Замечание: Все функции в этом классе являются реентерабельными, а registerFormat() является также потокобезопасной. Открытые типы
Открытые функции
Статические открытые члены
Переопределённые защищённые функции
Дополнительные унаследованные члены
Подробное описаниеКласс QSettings предоставляет постоянные платформонезависимые настройки приложения. Обычно пользователи ожидают, что приложение будет запоминать свои настройки (размеры и позиции окон, параметры и т.д.) между сессиями. Эта информация часто сохраняется в системном реестре в Windows и в файлах настроек XML в Mac OS X. В Unix-системах, в отсутствии стандарта, большинство приложений (включая приложения KDE) используют текстовые INI-файлы. QSettings - это абстракция вокруг этих технологий, позволяющая сохранить и восстановить настройки приложения переносимым способом. Он также поддерживает пользовательские форматы хранения. API QSettings основан на QVariant, позволяя вам с минимумом усилий сохранять большинство типов, основанных на значениях, таких как QString, QRect и QImage. Если всё, что вам нужно, это непостоянные структуры в памяти, то рассмотрите вместо этого возможность использования QMap<QString, QVariant>. Основное использованиеПри создании объекта QSettings вы должны передать название вашей компании или организации, а также название вашего приложения. Например, если ваш продукт называется "Star Runner", а название вашей компании - "MySoft", то вы должны создать объект QSettings следующим образом: QSettings settings("MySoft", "Star Runner"); Объект QSettings может быть создан либо в стеке, либо в куче (т.е. при помощи new). Создание и уничтожение объекта QSettings очень быстрое. Если вы используете QSettings во многих местах вашего приложения, то вы можете указать название организации и название приложения с помощью QCoreApplication::setOrganizationName() и QCoreApplication::setApplicationName(), а затем использовать конструктор QSettings по умолчанию: QCoreApplication::setOrganizationName("MySoft"); QCoreApplication::setOrganizationDomain("mysoft.com"); QCoreApplication::setApplicationName("Star Runner"); ... QSettings settings; (Здесь мы также указываем Интернет-домен организации. Когда Интернет-домен установлен, он используется в Mac OS X вместо названия организации, поскольку приложения Mac OS X традиционно используют Интернет-домен для своей идентификации. Если домен не установлен, то из названия организации получается фиктивный домен. Более подробную информацию смотрите в Платформо-зависимых замечаниях.) QSettings сохраняет настройки. Каждая настройка состоит из QString, который указывает название настройки (ключ key), и QVariant, который сохраняет данные, ассоциированные с ключом. Для записи настроек используйте setValue(). Например: settings.setValue("editor/wrapMargin", 68); Если уже существует настройка с таким же ключом, то существующее значение перезаписывается новым значением. Ради эффективности изменения могут быть не сразу сохранены в постоянное место хранения. (Вы всегда можете вызвать sync(), чтобы зафиксировать ваши изменения.) Вы можете получить значение настройки обратно, используя value(): int margin = settings.value("editor/wrapMargin").toInt(); Если нет настройки с заданным названием, то QSettings возвращает нулевой QVariant (который может быть преобразован в целое число 0). Вы можете указать другое значение по умолчанию, передав второй аргумент в value(): int margin = settings.value("editor/wrapMargin", 80).toInt(); Чтобы проверить, существует ли данный ключ, вызовите contains(). Для удаления настройки, ассоциированной с ключом, вызовите remove(). Чтобы получить список всех ключей, вызовите allKeys(). Чтобы удалить все ключи, вызовите clear(). QVariant и типы ГПИПоскольку QVariant является частью библиотеки QtCore, то он не может предоставить функции преобразования в такие типы данных, как QColor, QImage и QPixmap, которые являются частью QtGui. Другими словами, нет функций toColor(), toImage() или toPixmap() в QVariant. Вместо этого вы можете использовать QVariant::value() или шаблонную функцию qVariantValue(). Например: QSettings settings("MySoft", "Star Runner"); QColor color = settings.value("DataPump/bgcolor").value<QColor>(); Обратное преобразование (например, из QColor в QVariant) происходит автоматически для всех типов данных, поддерживаемых QVariant, включая типы, связанные с ГПИ: QSettings settings("MySoft", "Star Runner"); QColor color = palette().background().color(); settings.setValue("DataPump/bgcolor", color); Пользовательские типы, зарегистрированные с помощью qRegisterMetaType() и qRegisterMetaTypeStreamOperators(), могут быть сохранены при помощи QSettings. Синтаксис разделов и ключейКлючи настроек могут содержать любые Unicode-символы. Реестр Windows и INI-файлы используют нечувствительные к регистру ключи, в то время как Carbon Preferences API в Mac OS X использует чувствительные к регистру ключи. Чтобы избежать проблем с переносимостью, следуйте следующим простым правилам:
Вы можете формировать иерархические ключи при помощи символа '/' как разделителя, подобно путям файлов в Unix. Например: settings.setValue("mainwindow/size", win->size()); settings.setValue("mainwindow/fullScreen", win->isFullScreen()); settings.setValue("outputpanel/visible", panel->isVisible()); Если вы ходите сохранить или восстановить несколько настроек с одинаковым префиксом, то вы можете указать префикс при помощи beginGroup() и вызова endGroup() в конце. Вот тот же пример снова, но на этот раз с использованием механизма групп: settings.beginGroup("mainwindow"); settings.setValue("size", win->size()); settings.setValue("fullScreen", win->isFullScreen()); settings.endGroup(); settings.beginGroup("outputpanel"); settings.setValue("visible", panel->isVisible()); settings.endGroup(); Если с помощью beginGroup() установлена группа, то поведение большинства функций в результате изменяется. Группы могут быть установлены рекурсивно. В дополнение к группам QSettings также поддерживается концепция "массива". Для получения дополнительной информации смотрите beginReadArray() и beginWriteArray(). Механизм альтернативыДавайте предположим, что вы создали объект QSettings с названием организации "MySoft" и названием приложения "Star Runner". Когда вы ищете значения, поиск происходит по четырём местам в следующем порядке:
(Смотрите Платформо-зависимые замечания ниже для получения информации о том, где эти места находятся на различных платформах, поддерживаемых Qt.) Если ключ не может быть найден в первом месте, то поиск продолжается во втором и т.д. Это позволяет вам сохранять настройки в рамках системы или организации и переопределять их для каждого пользователя или приложения. Для выключения этого механизма вызовите setFallbacksEnabled(false). Несмотря на то, что ключи во всех четырех размещениях доступны для чтения, только первый файл (пользовательское размещение для приложения) доступен для записи. Чтобы записать в любой другой файл, опустите название приложения и/или укажите QSettings::SystemScope (в отличие от QSettings::UserScope по умолчанию). Давайте посмотрим на примере: QSettings obj1("MySoft", "Star Runner"); QSettings obj2("MySoft"); QSettings obj3(QSettings::SystemScope, "MySoft", "Star Runner"); QSettings obj4(QSettings::SystemScope, "MySoft"); Таблица ниже подводит итог, какой объект QSettings к какому месту предоставляет доступ. "X" означает, что размещение является основным местом, связанным с объектом QSettings, и используется как для чтения, так и для записи; "o" означает, что размещение используется в качестве альтернативного варианта для чтения.
Красота этого механизма заключается в том, что он работает на всех платформах, поддерживаемых Qt, и что он по-прежнему даёт вам большую гибкость, не требуя указания любых имён файлов и путей реестра. Если вы хотите использовать INI-файлы на всех платформах вместо родного API, то вы должны передать QSettings::IniFormat в качестве первого аргумента в конструктор QSettings, а затем область действия, название организации и название приложения: QSettings settings(QSettings::IniFormat, QSettings::UserScope, "MySoft", "Star Runner"); Пример "Settings Editor" позволяет вам экспериментировать с различным размещением настроек и включённой или выключенной альтернативой. Восстановление состояния приложения с ГПИЧасто QSettings используется для сохранения состояния приложения с ГПИ. Следующий пример показывает, как использовать QSettings для сохранения и восстановления геометрии главного окна приложения. void MainWindow::writeSettings() { QSettings settings("Moose Soft", "Clipper"); settings.beginGroup("MainWindow"); settings.setValue("size", size()); settings.setValue("pos", pos()); settings.endGroup(); } void MainWindow::readSettings() { QSettings settings("Moose Soft", "Clipper"); settings.beginGroup("MainWindow"); resize(settings.value("size", QSize(400, 400)).toSize()); move(settings.value("pos", QPoint(200, 200)).toPoint()); settings.endGroup(); } Смотрите в разделе Геометрия окна обсуждение того, почему для восстановления геометрии окна лучше вызывать QWidget::resize() и QWidget::move(), чем QWidget::setGeometry(). Функции readSettings() и writeSettings() должны быть вызваны из конструктора главного окна и обработчика события закрытия следующим образом: MainWindow::MainWindow() { ... readSettings(); } void MainWindow::closeEvent(QCloseEvent *event) { if (userReallyWantsToQuit()) { writeSettings(); event->accept(); } else { event->ignore(); } } Смотрите пример "Application" для автономной иллюстрации использования QSettings. Доступ к настройкам одновременно из нескольких потоков или процессовQSettings является реентерабельным. Это означает, что вы можете использовать разные объекты QSettings в разных потоках одновременно. Эта гарантия действует даже тогда, когда объекты QSettings ссылаются на один и тот же файл на диске (или одну и ту же запись в системном реестре). Если настройка изменяется через один из объектов QSettings, то изменения сразу же станут доступны в любых других объектах QSettings, которые взаимодействуют с тем же размещением и которые живут в том же процессе. QSettings может безопасно использоваться в различных процессах (которые могут быть различными экземплярами вашего приложения, запущенными в одно и то же время, либо в принципе различными приложениями) для чтения и записи в одно и то же системное размещение. Он использует консультативную блокировку файлов (advisory file locking) и умный алгоритм слияния для обеспечения целостности данных. Заметьте, что sync() импортирует изменения, сделанные другими процессами (в дополнение к записи изменений из этого QSettings). Платформо-зависимые замечанияРазмещения, в которых сохраняются настройки приложенияКак упоминалось в разделе Механизм альтернативы, QSettings сохраняет настройки для приложения в четырёх местах, в зависимости от того, являются ли настройки пользовательскими или системными и специфичны ли они для приложения или организации. Для простоты мы предполагаем, что организация называется MySoft, а приложение называется Star Runner. В системах Unix, если форматом файла является NativeFormat, то следующие файлы используются по умолчанию:
В Mac OS X версий 10.2 и 10.3 по умолчанию используются эти файлы:
В Windows настройки NativeFormat хранятся по следующим путям реестра:
Замечание: В Windows для 32-битных программ, запущенных в режиме WOW64, настройки сохраняются по следующему пути реестра: HKEY_LOCAL_MACHINE\Software\WOW6432node. Если форматом файла является IniFormat, то следующие файлы используются в Unix и Mac OS X:
В Windows используются следующие файлы:
Путём %APPDATA% обычно является C:\Documents and Settings\User Name\Application Data; путём %COMMON_APPDATA% - C:\Documents and Settings\All Users\Application Data. Пути для файлов .ini и .conf могут быть изменены при помощи setPath(). В Unix и Mac OS X пользователь может переопределить их, установив переменную окружения XDG_CONFIG_HOME; подробную информацию смотрите в setPath(). Прямой доступ к файлам INI и .plistИногда вам действительно необходимо получить доступ к настройкам в файле или реестре по определённому пути. На всех платформах, если вы хотите прочитать INI-файл напрямую, вы должны использовать конструктор QSettings, который принимает имя файла в качестве первого параметра, а QSettings::IniFormat - в качестве второго. Например: QSettings settings("/home/petra/misc/myapp.ini", QSettings::IniFormat); Вы можете использовать объект QSettings для чтения и записи настроек в файле. В Mac OS X вы можете получить доступ к файлам .plist, основанным на XML, передав QSettings::NativeFormat в качестве второго параметра. Например: QSettings settings("/Users/petra/misc/myapp.plist", QSettings::NativeFormat); Прямой доступ к реестру WindowsВ Windows QSettings позволяет вам получить доступ к настройкам, которые были записаны в формате QSettings (или к настройкам в поддерживаемом формате, например, строковым данным), в системном реестре. Это делается путём создания объекта QSettings с путём в реестре и QSettings::NativeFormat. Например: QSettings settings("HKEY_CURRENT_USER\\Software\\Microsoft\\Office", QSettings::NativeFormat); Все записи реестра, которые появляются по указанному пути, могут быть прочитаны или записаны через объект QSettings как обычно (используя наклонную черту вместо обратной наклонной черты). Например: settings.setValue("11.0/Outlook/Security/DontTrustInstalledFiles", 0); Заметьте, что символ обратной наклонной черты, как уже упоминалось, используется QSettings для разделения подключей. В результате вы не можете ни читать, ни записывать записи реестра Windows, которые содержат наклонные черты и обратные наклонные черты; вы должны использовать родной API Windows, если вам это необходимо. Доступ к общим настройкам реестра в WindowsВ Windows ключ может иметь как значение, так и подключи. Его значение по умолчанию доступно с использованием "Default" или "." вместо подключа: settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy", "Milkyway"); settings.setValue("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Sun", "OurStar"); settings.value("HKEY_CURRENT_USER\\MySoft\\Star Runner\\Galaxy\\Default"); // возвращает "Milkyway" На платформах, отличных от Windows, "Default" и "." будут обрабатываться как обычные подключи. Ограничения платформВ то время как QSettings пытается сгладить различия между разными поддерживаемыми платформами, всё ещё есть несколько различий, о которых вы должны знать при переносе приложения:
Смотрите также QVariant, QSessionManager, Пример "Settings Editor" и Пример "Application". Описание типов-членовenum QSettings::FormatДанное перечисление определяет формат хранения, используемый QSettings.
В Unix NativeFormat и IniFormat означают одно и то же, за исключение того, что различается расширение файла (.conf для NativeFormat, .ini для IniFormat). Формат файла INI является форматом файла Windows, который поддерживается Qt на всех платформах. В отсутствии стандарта на INI мы пытаемся следовать тому, что делает Microsoft, за исключением следующего:
Смотрите также registerFormat() и setPath(). typedef QSettings::ReadFuncПсевдоним типа для указателя на функцию со следующей сигнатурой: bool myReadFunc(QIODevice &device, QSettings::SettingsMap &map); ReadFunc используется в registerFormat() как указатель на функцию, которая читает набор пар ключ/значение. ReadFunc должна прочитать все параметры за один раз и вернуть все настройки в контейнере SettingsMap, который изначально пустой. Смотрите также WriteFunc и registerFormat(). enum QSettings::ScopeДанное перечисление определяет, являются ли настройки специфичными для пользователя или общими для всех пользователей этой системы.
Смотрите также setPath(). typedef QSettings::SettingsMapПсевдоним типа для QMap<QString, QVariant>. Смотрите также registerFormat(). enum QSettings::StatusВозможны следующие значения статуса:
Смотрите также status(). typedef QSettings::WriteFuncПсевдоним типа для указателя на функцию со следующей сигнатурой: bool myWriteFunc(QIODevice &device, const QSettings::SettingsMap &map); WriteFunc используется в registerFormat() как указатель на функцию, которая читает набор пар ключ/значение. WriteFunc вызывается только один раз, так что вы должны записать все настройки сразу. Смотрите также ReadFunc и registerFormat(). Описание функций-членовQSettings::QSettings ( const QString & organization, const QString & application = QString(), QObject * parent = 0 )Создаёт объект QSettings для доступа к настройкам приложения с названием application организации с названием organization и родителем parent. Пример: QSettings settings("Moose Tech", "Facturo-Pro"); Область действия устанавливается в QSettings::UserScope, а формат - в QSettings::NativeFormat (т.е. вызов setDefaultFormat() перед вызовом этого конструктора не имеет никакого эффекта). Смотрите также setDefaultFormat() и Механизм альтернативы. QSettings::QSettings ( Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0 )Создаёт объект QSettings для доступа к настройкам приложения с названием application организации с названием organization и родителем parent. Если область действия scope равна QSettings::UserScope, то объект QSettings вначале ищет пользовательские настройки, а затем, в качестве запасного варианта, - общесистемные настройки. Если scope равна QSettings::SystemScope, то объект QSettings игнорирует пользовательские настройки и предоставляет доступ к общесистемным настройкам. Формат хранения устанавливается в QSettings::NativeFormat (т.е. вызов setDefaultFormat() перед вызовом этого конструктора не имеет никакого эффекта). Если название приложения не задано, то объект QSettings предоставит доступ только к расположению организации. Смотрите также setDefaultFormat(). QSettings::QSettings ( Format format, Scope scope, const QString & organization, const QString & application = QString(), QObject * parent = 0 )Создаёт объект QSettings для доступа к настройкам приложения с названием application организации с названием organization и родителем parent. Если область действия scope равна QSettings::UserScope, то объект QSettings вначале ищет пользовательские настройки, а затем, в качестве запасного варианта, - общесистемные настройки. Если scope равна QSettings::SystemScope, то объект QSettings игнорирует пользовательские настройки и предоставляет доступ к общесистемным настройкам. Если формат format равен QSettings::NativeFormat, то для хранения настроек используется родной API. Если format равен QSettings::IniFormat, то используется формат INI. Если название приложения не задано, то объект QSettings предоставит доступ только к расположению организации. QSettings::QSettings ( const QString & fileName, Format format, QObject * parent = 0 )Создаёт объект QSettings для доступа к настройкам, хранящимся в файле с именем fileName с родителем parent. Если файл ещё не существует, то он будет создан. Если формат format равен QSettings::NativeFormat, то это означает, что имя файла fileName зависит от платформы. В Unix имя файла fileName является именем INI-файла. В Mac OS X fileName является именем файла .plist. В Windows fileName является путём в системном реестре. Если формат format равен QSettings::IniFormat, то имя файла fileName является именем INI-файла. Предупреждение: Эта функция предоставлена для удобства. Она хорошо работает при доступе к файлам INI или .plist, сгенерированных Qt, но может перестать работать на некоторых синтаксисах в таких файлах, созданных другими программами. В частности, следует учитывать следующие ограничения:
Смотрите также fileName(). QSettings::QSettings ( QObject * parent = 0 )Создаёт объект QSettings для доступа к настройкам приложения и организации, установленных ранее вызовами QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain() и QCoreApplication::setApplicationName(). Областью действия является QSettings::UserScope, а форматом - defaultFormat() (по умолчанию QSettings::NativeFormat). Используйте setDefaultFormat() перед вызовом этого конструктора для изменения формата по умолчанию, используемого этим конструктором. Код QSettings settings("Moose Soft", "Facturo-Pro"); эквивалентен QCoreApplication::setOrganizationName("Moose Soft"); QCoreApplication::setApplicationName("Facturo-Pro"); QSettings settings; Если QCoreApplication::setOrganizationName() и QCoreApplication::setApplicationName() не были предварительно вызваны, то объект QSettings будет не в состоянии читать или писать какие-либо настройки, а status() будет возвращать AccessError. В Mac OS X, если для организации определены и имя, и Интернет-домен, то домен является более предпочтительным, чем имя. На других платформах имя является более предпочтительным, чем домен. Смотрите также QCoreApplication::setOrganizationName(), QCoreApplication::setOrganizationDomain(), QCoreApplication::setApplicationName() и setDefaultFormat(). QSettings::~QSettings ()Уничтожает объект QSettings. Любые несохранённые изменения в конечном счёте будут записаны на место постоянного хранения. Смотрите также sync(). QStringList QSettings::allKeys () constВозвращает список всех ключей, включая подключи, которые могут быть прочитаны с помощью объекта QSettings. Пример: QSettings settings; settings.setValue("fridge/color", Qt::white); settings.setValue("fridge/size", QSize(32, 96)); settings.setValue("sofa", true); settings.setValue("tv", false); QStringList keys = settings.allKeys(); // keys: ["fridge/color", "fridge/size", "sofa", "tv"] Если с помощью beginGroup() установлена группа, то возвращаются только ключи в группе, без префикса группы: settings.beginGroup("fridge"); keys = settings.allKeys(); // keys: ["color", "size"] Смотрите также childGroups() и childKeys(). QString QSettings::applicationName () constВозвращает название приложения, используемое для хранения настроек. Эта функция была введена в Qt 4.4. Смотрите также QCoreApplication::applicationName(), format(), scope() и organizationName(). void QSettings::beginGroup ( const QString & prefix )Добавляет префикс prefix к текущей группе. Текущая группа автоматически добавляется в начало всех ключей, определяемых QSettings. Кроме того, функции запросов, такие как childGroups(), childKeys() и allKeys(), основываются на группе. По умолчанию группа не установлена. Группы могут быть использованы для того, чтобы избежать ввода раз за разом одних и тех же путей настроек. Например: settings.beginGroup("mainwindow"); settings.setValue("size", win->size()); settings.setValue("fullScreen", win->isFullScreen()); settings.endGroup(); settings.beginGroup("outputpanel"); settings.setValue("visible", panel->isVisible()); settings.endGroup(); Это позволит установить значения трёх настроек:
Вызовите endGroup() для сброса текущей группы к состоянию перед вызовом beginGroup(). Группы могут быть вложенными. Смотрите также endGroup() и group(). int QSettings::beginReadArray ( const QString & prefix )Добавляет префикс prefix к текущей группе и начинает читать из массива. Возвращает размер массива. Пример: struct Login { QString userName; QString password; }; QList<Login> logins; ... QSettings settings; int size = settings.beginReadArray("logins"); for (int i = 0; i < size; ++i) { settings.setArrayIndex(i); Login login; login.userName = settings.value("userName").toString(); login.password = settings.value("password").toString(); logins.append(login); } settings.endArray(); Используйте beginWriteArray() для предварительной записи массива. Смотрите также beginWriteArray(), endArray() и setArrayIndex(). void QSettings::beginWriteArray ( const QString & prefix, int size = -1 )Добавляет префикс prefix к текущей группе и начинает запись массива размером size. Если размер size равен -1 (по умолчанию), то он определяется автоматически на основании индексов записываемых записей. Если у вас есть множество вхождений определённого набора ключей, то вы можете упростить свою жизнь, используя массивы. Например, давайте предположим, что вы хотите сохранить массив имён пользователей и паролей переменной длины. Тогда вы можете написать: struct Login { QString userName; QString password; }; QList<Login> logins; ... QSettings settings; settings.beginWriteArray("logins"); for (int i = 0; i < logins.size(); ++i) { settings.setArrayIndex(i); settings.setValue("userName", list.at(i).userName); settings.setValue("password", list.at(i).password); } settings.endArray(); Сгенерированные ключи будут иметь вид
Чтобы считать массив обратно, используйте beginReadArray(). Смотрите также beginReadArray(), endArray() и setArrayIndex(). QStringList QSettings::childGroups () constВозвращает список всех ключей групп верхнего уровня, содержащих ключи, которые могут быть прочитаны с помощью объекта QSettings. Пример: QSettings settings; settings.setValue("fridge/color", Qt::white); settings.setValue("fridge/size", QSize(32, 96)); settings.setValue("sofa", true); settings.setValue("tv", false); QStringList groups = settings.childGroups(); // group: ["fridge"] Если с помощью beginGroup() установлена группа, то возвращаются только ключи верхнего уровня в группе, без префикса группы. settings.beginGroup("fridge"); groups = settings.childGroups(); // groups: [] Вы можете также рекурсивно перемещаться через все иерархические настройки при помощи childKeys() и childGroups(). Смотрите также childKeys() и allKeys(). QStringList QSettings::childKeys () constВозвращает список всех ключей верхнего уровня, которые могут быть прочитаны с помощью объекта QSettings. Пример: QSettings settings; settings.setValue("fridge/color", Qt::white); settings.setValue("fridge/size", QSize(32, 96)); settings.setValue("sofa", true); settings.setValue("tv", false); QStringList keys = settings.childKeys(); // keys: ["sofa", "tv"] Если с помощью beginGroup() установлена группа, то возвращаются только ключи верхнего уровня, без префикса группы: settings.beginGroup("fridge"); keys = settings.childKeys(); // keys: ["color", "size"] Вы можете также рекурсивно перемещаться через все иерархические настройки при помощи childKeys() и childGroups(). Смотрите также childGroups() и allKeys(). void QSettings::clear ()Удаляет все записи в основном расположении, связанном с объектом QSettings. Записи в альтернативных расположениях не удаляются. Если вы хотите удалить только записи в текущей группе group(), то используйте вместо этого remove(""). Смотрите также remove() и setFallbacksEnabled(). bool QSettings::contains ( const QString & key ) constВозвращает true, если существует настройка с названием key; в противном случае возвращает false. Если с помощью beginGroup() установлена группа, то ключ key берётся по отношению к этой группе. Заметьте, что реестр Windows и INI-файлы используют нечувствительные к регистру ключи, в то время как Carbon Preferences API в Mac OS X использует чувствительные к регистру ключи. Чтобы избежать проблем с переносимостью, смотрите правила Синтаксиса разделов и ключей. Смотрите также value() и setValue(). Format QSettings::defaultFormat () [static]Возвращает формат файла по умолчанию, используемый для сохранения настроек в конструкторе QSettings(QObject *). Если формат по умолчанию не установлен, то используется QSettings::NativeFormat. Эта функция была введена в Qt 4.4. Смотрите также setDefaultFormat() и format(). void QSettings::endArray ()Заканчивает массив, начатый при помощи beginReadArray() или beginWriteArray(). Смотрите также beginReadArray() и beginWriteArray(). void QSettings::endGroup ()Сбрасывает группу к той, какой она была до соответствующего вызова beginGroup(). Пример: settings.beginGroup("alpha"); // settings.group() == "alpha" settings.beginGroup("beta"); // settings.group() == "alpha/beta" settings.endGroup(); // settings.group() == "alpha" settings.endGroup(); // settings.group() == "" Смотрите также beginGroup() и group(). bool QSettings::event ( QEvent * event ) [virtual protected]Переопределено от QObject::event(). bool QSettings::fallbacksEnabled () constВозвращает true, если механизм альтернативы включён; в противном случае возвращает false. По умолчанию механизм альтернативы включён. Смотрите также setFallbacksEnabled(). QString QSettings::fileName () constВозвращает путь, по которому сохраняются настройки, записываемые с помощью объекта QSettings. В Windows, если формат равен QSettings::NativeFormat, возвращаемым значением является путь в системном реестре, не путь к файлу. Смотрите также isWritable() и format(). Format QSettings::format () constВозвращает формат, используемый для сохранения настроек. Эта функция была введена в Qt 4.4. Смотрите также defaultFormat(), fileName(), scope(), organizationName() и applicationName(). QString QSettings::group () constВозвращает текущую группу. Смотрите также beginGroup() и endGroup(). QTextCodec * QSettings::iniCodec () constВозвращает кодек, который используется для доступа к файлам INI. По умолчанию кодек не используется, так что будет возвращён нулевой указатель. Эта функция была введена в Qt 4.5. Смотрите также setIniCodec(). bool QSettings::isWritable () constВозвращает true, если настройки могут быть сохранены с помощью объекта QSettings; в противном случае возвращает false. Одной из причин, почему isWritable() может вернуть false, является то, что QSettings работает с файлом только для чтения. Предупреждение: Эта функция не является абсолютно надёжной, так как права доступа могут измениться в любой момент. Смотрите также fileName(), status() и sync(). QString QSettings::organizationName () constВозвращает название организации, используемой для хранения настроек. Эта функция была введена в Qt 4.4. Смотрите также QCoreApplication::organizationName(), format(), scope() и applicationName(). Format QSettings::registerFormat ( const QString & extension, ReadFunc readFunc, WriteFunc writeFunc, Qt::CaseSensitivity caseSensitivity = Qt::CaseSensitive ) [static]Регистрирует пользовательский формат хранения. В случае успеха возвращает специальное значение Format, которое затем может быть передано в конструктор QSettings. В случае неудачи возвращает InvalidFormat. extension - это расширение файла, связанное с форматом (без '.'). Параметры readFunc и writeFunc являются указателями на функции, которые читают и записывают набор пар ключ/значение. Параметр QIODevice в функциях чтения и записи всегда открывает в двоичном режиме (т.е. без флага QIODevice::Text). Параметр caseSensitivity указывает, являются ли ключи чувствительными к регистру или нет. Это оказывает влияние на поиск значений с помощью QSettings. По умолчанию чувствительны к регистру. По умолчанию, если вы используете один из конструкторов, которые работают с названием организации и названием приложения, то используются те же самые расположения в файловой системе, что и для IniFormat. Для указания другого размещения используйте setPath(). Пример: bool readXmlFile(QIODevice &device, QSettings::SettingsMap &map); bool writeXmlFile(QIODevice &device, const QSettings::SettingsMap &map); int main(int argc, char *argv[]) { const QSettings::Format XmlFormat = QSettings::registerFormat("xml", readXmlFile, writeXmlFile); QSettings settings(XmlFormat, QSettings::UserScope, "MySoft", "Star Runner"); ... } Замечание: Эта функция потокобезопасна. Эта функция была введена в Qt 4.1. Смотрите также setPath(). void QSettings::remove ( const QString & key )Удаляет настройку key и любые вложенные в key настройки. Пример: QSettings settings; settings.setValue("ape"); settings.setValue("monkey", 1); settings.setValue("monkey/sea", 2); settings.setValue("monkey/doe", 4); settings.remove("monkey"); QStringList keys = settings.allKeys(); // keys: ["ape"] Имейте в виду, что если в одном из альтернативных расположений содержится настройка с тем же ключом, то настройка будет видна после remove(). Если key является пустой строкой, то удаляются все ключи текущей группы group(). Например: QSettings settings; settings.setValue("ape"); settings.setValue("monkey", 1); settings.setValue("monkey/sea", 2); settings.setValue("monkey/doe", 4); settings.beginGroup("monkey"); settings.remove(""); settings.endGroup(); QStringList keys = settings.allKeys(); // keys: ["ape"] Заметьте, что реестр Windows и INI-файлы используют нечувствительные к регистру ключи, в то время как Carbon Preferences API в Mac OS X использует чувствительные к регистру ключи. Чтобы избежать проблем с переносимостью, смотрите правила Синтаксиса разделов и ключей. Смотрите также setValue(), value() и contains(). Scope QSettings::scope () constВозвращает область действия, используемую для сохранения настроек. Эта функция была введена в Qt 4.4. Смотрите также format(), organizationName() и applicationName(). void QSettings::setArrayIndex ( int i )Устанавливает текущий индекс массива в i. Вызовы таких функций, как setValue(), value(), remove() и contains(), будут оперировать с записью массива с этим индексом. Перед вызовом этой функции вы должны вызвать beginReadArray() или beginWriteArray(). void QSettings::setDefaultFormat ( Format format ) [static]Устанавливает формат файла по умолчанию в заданный формат format, который используется для сохранения настроек в конструкторе QSettings(QObject *). Если формат по умолчанию не установлен, то используется QSettings::NativeFormat. Смотрите документацию на используемый вами конструктор QSettings, чтобы увидеть, не проигнорирует ли конструктор эту функцию. Эта функция была введена в Qt 4.4. Смотрите также defaultFormat() и format(). void QSettings::setFallbacksEnabled ( bool b )Устанавливает, включен ли механизм альтернативы, в b. По умолчанию механизм альтернативы включён. Смотрите также fallbacksEnabled(). void QSettings::setIniCodec ( QTextCodec * codec )Устанавливает кодек для доступа к INI-файлам (включая файлы .conf в Unix) в codec. Кодек используется для декодирования любых данных, которые считываются из INI-файла, и кодирования любых данных, которые записываются в файл. По умолчанию кодек не используется, а не ASCII символы кодируются с помощью стандартных escape-последовательностей INI. Предупреждение: Кодек должен быть установлен непосредственно после создания объекта QSettings, перед доступом к любым данным. Эта функция была введена в Qt 4.5. Смотрите также iniCodec(). void QSettings::setIniCodec ( const char * codecName )Это перегруженная функция. Устанавливает кодек для доступа к INI-файлам (включая файлы .conf в Unix) в QTextCodec для кодировки, заданной именем кодека codecName. Популярными значениями для codecName являются "ISO 8859-1", "UTF-8" и "UTF-16". Если кодировка не распознана, то ничего не происходит. Эта функция была введена в Qt 4.5. Смотрите также QTextCodec::codecForName(). void QSettings::setPath ( Format format, Scope scope, const QString & path ) [static]Устанавливает путь, используемый для сохранения настроек, для заданных формата format и области действия scope в path. Формат format может быть пользовательским форматом. В таблице ниже обобщены значения по умолчанию:
Пути UserScope по умолчанию в Unix и Mac OS X ($HOME/.config или $HOME/Settings) могут быть переопределены пользователем установкой переменной окружения XDG_CONFIG_HOME. Пути SystemScope по умолчанию в Unix и Mac OS X (/etc/xdg) могут быть переопределены при сборке библиотеки Qt при использовании с конфигурационным скриптом configure флага --sysconfdir (подробную информаци смотрите в QLibraryInfo). Настройка путей NativeFormat в Windows и Mac OS X не имеет эффекта. Предупреждение: Эта функция не влияет на существующие объекты QSettings. Эта функция была введена в Qt 4.1. Смотрите также registerFormat(). void QSettings::setValue ( const QString & key, const QVariant & value )Устанавливает значение настройки key в значение value. Если key уже существует, то предыдущее значение перезаписывается. Заметьте, что реестр Windows и INI-файлы используют нечувствительные к регистру ключи, в то время как Carbon Preferences API в Mac OS X использует чувствительные к регистру ключи. Чтобы избежать проблем с переносимостью, смотрите правила Синтаксиса разделов и ключей. Пример: QSettings settings; settings.setValue("interval", 30); settings.value("interval").toInt(); // возвращает 30 settings.setValue("interval", 6.55); settings.value("interval").toDouble(); // возвращает 6.55 Смотрите также value(), remove() и contains(). Status QSettings::status () constВозвращает код состояния, указывающий первую ошибку, которая встретилась QSettings, или QSettings::NoError, если ошибок не было. Помните, что QSettings откладывает выполнение некоторых операций. По этой причине перед вызовом status() вам может потребоваться вызвать sync() для гарантии того, что сохранённые в QSettings данные записаны на диск. Смотрите также sync(). void QSettings::sync ()Записывает любые несохранённые данные в постоянное хранилище и перезагружает любые настройки, которые были к тому времени изменены другим приложением. Эта функция вызывается автоматически из деструктора QSettings и регулярно в цикле событий, так что вам обычно не требуется вызывать её самостоятельно. Смотрите также status(). QVariant QSettings::value ( const QString & key, const QVariant & defaultValue = QVariant() ) constВозвращает значение для настройки key. Если настройка не существует, то возвращает значение по умолчанию defaultValue. Если значение по умолчанию не указано, то по умолчанию будет возвращён QVariant. Заметьте, что реестр Windows и INI-файлы используют нечувствительные к регистру ключи, в то время как Carbon Preferences API в Mac OS X использует чувствительные к регистру ключи. Чтобы избежать проблем с переносимостью, смотрите правила Синтаксиса разделов и ключей. Пример: QSettings settings; settings.setValue("animal/snake", 58); settings.value("animal/snake", 1024).toInt(); // возвращает 58 settings.value("animal/zebra", 1024).toInt(); // возвращает 1024 settings.value("animal/zebra").toInt(); // возвращает 0 |
Попытка перевода Qt документации. Если есть желание присоединиться, или если есть замечания или пожелания, то заходите на форум: Перевод Qt документации на русский язык... Люди внесшие вклад в перевод: Команда переводчиков |