Хранение настроек

Добавлено 14 мая 2022 в 21:10

Qt поставляется с элементом Settings для загрузки и хранения настроек. Он всё еще находится в лабораторном модуле, а это значит, что его API в будущем может сломаться. Поэтому имейте это в виду.

Вот небольшой пример, который применяет значение цвета к базовому прямоугольнику. Каждый раз, когда пользователь кликает на окно, генерируется новый случайный цвет. Когда приложение будет закрыто и перезапущено снова, вы должны увидеть свой последний цвет. Цвет по умолчанию должен быть цветом, изначально установленным для корневого прямоугольника.

import QtQuick
import Qt.labs.settings 1.0

Rectangle {
    id: root

    width: 320
    height: 240
    color: '#fff' // цвет по умолчанию
    Settings {
        property alias color: root.color
    }
    MouseArea {
        anchors.fill: parent
        // случайный цвет
        onClicked: root.color = Qt.hsla(Math.random(), 0.5, 0.5, 1.0);
    }
}

Значение настроек сохраняется каждый раз при изменении значения. Это может быть не всегда то, что вам нужно. Чтобы сохранять настройки только при необходимости, вы можете использовать стандартные свойства в сочетании с функцией, которая изменяет настройки при вызове.

Rectangle {
    id: root
    color: settings.color
    Settings {
        id: settings
        property color color: '#000000'
    }
    function storeSettings() { // возможно, выполняется при уничтожении
        settings.color = root.color
    }
}

Также можно сгруппировать настройки в разные категории, используя свойство category.

Settings {
    category: 'window'
    property alias x: window.x
    property alias y: window.x
    property alias width: window.width
    property alias height: window.height
}

Настройки сохраняются в соответствии с именами ваших приложения, организации и домена. Эта информация обычно задается в функции main вашего кода на C++.

int main(int argc, char** argv) {
    ...
    QCoreApplication::setApplicationName("Awesome Application");
    QCoreApplication::setOrganizationName("Awesome Company");
    QCoreApplication::setOrganizationDomain("org.awesome");
    ...
}

Если вы пишете приложение на чистом QML, вы можете установить эти же атрибуты, используя глобальные свойства Qt.application.name, Qt.application.organization и Qt.application.domain.

Теги

GUI / Графический интерфейс пользователяQMLQtQtQuickПрограммирование

На сайте работает сервис комментирования DISQUS, который позволяет вам оставлять комментарии на множестве сайтов, имея лишь один аккаунт на Disqus.com.

В случае комментирования в качестве гостя (без регистрации на disqus.com) для публикации комментария требуется время на премодерацию.