Settings QML Type:QML 持久的獨立於平臺的應用程序設置

Settings QML Type


提供持久的獨立於平臺的應用程序設置。

導入語句: import Qt.labs.settings 1.0

 

屬性

 

方法

 

詳細說明

Settings 類型提供持久的獨立於平臺的應用程序設置。

注意:此類型可通過導入Qt.labs.settings模塊獲得。Qt.labs模塊中的類型不能保證在將來的版本中保持兼容。

用戶通常希望應用程序在會話之間記住其設置(窗口大小和位置、選項等)。設置類型允許您以最小的工作量保存和還原此類應用程序設置。

通過在Settings元素中聲明屬性來指定各個設置值。支持所有基本類型屬性。推薦的方法是使用屬性別名,以便以兩種方式獲得自動屬性更新。下面的示例演示如何使用設置存儲和還原窗口的幾何圖形。

import QtQuick.Window 2.1
import Qt.labs.settings 1.0

Window {
    id: window

    width: 800
    height: 600

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

第一次啓動應用程序時,窗口將獲得指定爲800x600的默認維度。注意,沒有指定默認位置-我們讓窗口管理器來處理。稍後,當窗口幾何圖形更改時,新值將自動存儲到永久設置中。第二次運行的應用程序將從持久設置中獲取初始值,使窗口返回到以前的位置和大小。

通過使用屬性別名實現的完全聲明性語法的代價是,每當別名屬性的值發生更改時,都會存儲持久設置。普通屬性可用於獲得對存儲持久設置的更細粒度控制。下面的示例演示如何保存組件銷燬設置。

import QtQuick 2.1
import Qt.labs.settings 1.0

Item {
    id: page

    state: settings.state

    states: [
        State {
            name: "active"
            // ...
        },
        State {
            name: "inactive"
            // ...
        }
    ]

    Settings {
        id: settings
        property string state: "active"
    }

    Component.onDestruction: {
        settings.state = page.state
    }
}

請注意,現在如何在persistent setting屬性中指定默認值,並將實際屬性綁定到該設置,以便從persistent settings獲取初始值。

 

應用程序標識符

通過提供應用程序名稱、組織和域或指定文件名來標識特定於應用程序的設置。

#include <QGuiApplication>
#include <QQmlApplicationEngine>

int main(int argc, char *argv[])
{
    QGuiApplication app(argc, argv);
    app.setOrganizationName("Some Company");
    app.setOrganizationDomain("somecompany.com");
    app.setApplicationName("Amazing Application");

    QQmlApplicationEngine engine("main.qml");
    return app.exec();
}

這些通常在C++(在主程序的開頭)中指定,但也可以通過以下屬性在QML中控制:

 

類別

通過通過類別屬性指定類別名稱,可以將應用程序設置劃分爲邏輯類別。使用邏輯類別不僅可以提供更清晰的設置結構,而且還可以防止設置鍵之間可能發生的衝突。

如果需要多個類別,請使用多個設置對象,每個對象都有自己的類別:

Item {
    id: panel

    visible: true

    Settings {
        category: "OutputPanel"
        property alias visible: panel.visible
        // ...
    }

    Settings {
        category: "General"
        property alias fontSize: fontSizeSpinBox.value
        // ...
    }
}

與確保應用程序中的所有設置都具有唯一的名稱不同,可以將這些設置劃分爲唯一的類別,然後這些類別可能包含使用其他類別中使用的相同名稱的設置,而不會發生衝突。

 

說明:

當前的實現基於QSettings。這會帶來某些限制,例如缺少更改通知。使用一個設置實例寫入設置值不會更新另一個設置實例中的值,即使它們引用的是同一類別中的同一設置。

這些信息存儲在Windows的系統註冊表和macOS的XML首選項文件中。在其他Unix系統上,如果沒有標準,則使用INI文本文件。有關更多詳細信息,請參見QSettings文檔。

另請參見QSettings

 

屬性文檔:


category : string

此屬性保留設置類別的名稱。

類別可用於將相關設置分組在一起。

 

fileName : string

此屬性保存設置文件的路徑。如果文件不存在,則創建該文件。

Qt 5.12引入了這種特性。

另請參見QSettings::fileName和QSettings::IniFormat。

 

 

方法文檔:


setValue(keyvar value)

將“設置關鍵點”的值設置爲“值”。如果密鑰已存在,則覆蓋上一個值。

Qt 5.12中引入了該方法。

另請參見value()和QSettings::setValue。

 

sync()

將任何未保存的更改寫入永久存儲,並重新加載同時由其他應用程序更改的任何設置。

這個函數是由QSettings的析構函數和事件循環定期自動調用的,所以通常不需要自己調用它。

另請參見QSettings::sync。

 

var value(keyvar defaultValue)

返回設置鍵的值。如果設置不存在,則返回defaultValue。

Qt 5.12中引入了該方法。

另請參見setValue()和QSettings::value。

 

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章