0
点赞
收藏
分享

微信扫一扫

Hello Qt(五十四)———QML数据存储

写心之所想 2022-03-11 阅读 68

对于大多数应用程序,必须具备存储数据的能力。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
    }
}
举报

相关推荐

0 条评论