QML学习笔记(九)
Setting
一、描述
Settings类型提供持久的与平台无关的应用程序设置。
注意:此类型是通过导入Qt.labs.settings模块提供的。实验室模块中的类型不保证在未来的版本中保持兼容。用户通常希望应用程序能够跨会话记住它的设置(窗口大小和位置,选项等)。设置类型使您能够以最少的工作量保存和恢复此类应用程序设置。
通过在Settings元素中声明属性来指定各个设置值。支持所有基本类型属性。推荐的方法是使用属性别名,以便以两种方式自动更新属性。下面的示例显示如何使用“设置”存储和恢复窗口的几何图形。
1 | import QtQuick.Window 2.1 |
在应用程序第一次启动时,窗口获得指定为800x600的默认尺寸。注意,没有指定默认位置—我们让窗口管理器处理它。稍后,当窗口几何形状更改时,新值将自动存储到持久设置中。第二次运行的应用程序将从持久设置中获得初始值,使窗口恢复到以前的位置和大小。
通过使用属性别名来实现完全声明式语法,代价是在别名属性的值发生更改时存储持久设置。普通属性可用于对存储持久设置进行更细粒度的控制。下面的例子演示了如何保存组件销毁的设置。
1 | import QtQuick 2.1 |
注意现在如何在持久设置属性中指定默认值,并将实际属性绑定到该设置,以便从持久设置获得初始值。
二、应用识别符
通过提供应用程序名称、组织和域或指定fileName来标识特定于应用程序的设置。
1 | #include <QGuiApplication> |
这些通常在c++中main()的开头指定,但也可以通过以下属性在QML中控制:
- Qt.application.name,
- Qt.application.organization
- Qt.application.domain。
三、类
通过类别属性指定类别名称,可以将应用程序设置划分为逻辑类别。使用逻辑分类不仅可以提供更清晰的设置结构,还可以防止设置键之间可能的冲突。
如果需要多个类别,使用多个设置对象,每个对象都有自己的类别:
1 | Item { |
不用确保应用程序中的所有设置都有唯一的名称,设置可以划分为唯一的类别,然后这些类别可能包含使用其他类别中使用的相同名称的设置——而不会产生冲突。
四、注意事项
当前的实现基于QSettings。这就增加了某些限制,例如缺少变更通知。使用一个设置实例写入设置值不会更新另一个设置实例中的值,即使它们引用同一类别中的相同设置。
信息存储在Windows上的系统注册表中,存储在macOS上的XML首选项文件中。在其他Unix系统中,如果没有标准,则使用INI文本文件。更多细节请参阅QSettings文档。
五、属性
category
: string此属性保存设置类别的名称。
类别可用于将相关设置分组在一起。fileName
: string此属性保存设置文件的路径。如果该文件不存在,则创建该文件。
这个属性是在Qt 5.12中引入的。
六、方法
setValue(string key, var value)
将设置键的值设置为value。如果该键已经存在,则覆盖之前的值。
该方法在Qt 5.12中被引入。sync()
将任何未保存的更改写入永久存储,并重新加载同时被另一个应用程序更改的任何设置。
这个函数会从QSettings的析构函数中自动调用,并由事件循环定期调用,所以您通常不需要自己调用它。var value(string key, var defaultValue)
返回设置键的值。如果该设置不存在,则返回defaultValue。
该方法在Qt 5.12中被引入。