对于大多数应用程序,必须具备存储数据的能力。QT/C++提供了强大的QSettings类,用于将用户数据保存在本地文件或操作系统提供的数据结构中(如 Windows的注册表)。Qt Quick只提供了有限的直接访问本地数据的能力,没有提供能够直接读写操作系统本地文件的功能。在很多应用程序中,读写文件只能通过C++完成:使用Qt Quick实现前端界面,C++完成后端实际存储的功能。
大多数应用程序都需要存储数据,数据可以存储在本地文件中,也可以存储在本地或者远程的服务器。有些数据很简单(例如很多设置信息都是以键值对的形式存储),另外一些则非常复杂(例如要保存一本书的全部信息,包括书名、作者、出版社、出版年、内容简介,封面信息等)。针对这类数据,Qt Quick提供了自己的解决方案。
Qt/C++提供了强大的QSettings类,可以以独立于操作系统的方式,将程序数据存储到本地。QSettings利用的是操作系统相关的存储结构,或者是以一种通用的INI文件保存。
QT5.2开始,QML引入了新的类Settings,是QSettings的QML版本。使用Settings需要添加import Qt.labs.settings 1.0语句。
import QtQuick 2.0
import Qt.labs.settings 1.0
Rectangle
{
id: root
width: 320; height: 240
color: '#000000'
Settings
{
id: settings
property alias color: root.color
}
MouseArea
{
anchors.fill: parent
onClicked: root.color = Qt.hsla(Math.random(), 0.5, 0.5, 1.0);
}
}
本例创建一个带有颜色的矩形。用户点击矩形时,都会生成一个随机的颜色。当应用程序关闭时,当前颜色会保存在本地;重新打开程序,矩形会显示上一次最后的颜色。当程序第一次启动时,矩形会显示默认颜色#000000;第二次启动时,将会从Settings读取到存储的值并自动绑定到矩形的属性。
如果Settings在需要的时候保存,需要提供一个额外的辅助函数,在恰当的时刻调用即可。
Rectangle
{
id: root
color: settings.color
Settings
{
id: settings
property color color: '#000000'
}
function storeSettings()
{
settings.color = root.color
}
}