Qt:数据存储

1059 篇文章 274 订阅

保存和加载数据

QIODeviceQt Core中所有文件和数据存储设备的基础类。用于读取和编写数据的所有类都继承了这些类

设备的例子有QFile、QBuffer、QTcpSocket和QProcess。

  • QFile用于读写文本、二进制文件和资源
  • QBuffer类为QByteArray提供了一个QIODevice接口
  • QTcpSocket允许开发人员建立TCP连接并传输数据流
  • QProcess用于启动外部程序,并对该进程进行读写操作

其他:

Qt中的SQL支持

Qt SQL模块使用驱动程序插件与多个数据库API进行通信。Qt拥有SQLite、MySQL、Borland InterBase、 Oracle、ODBC、 PostgreSQL.的驱动程序。如果Qt不提供所需的驱动程序,也可以开发自己的驱动程序

Qt的SQL类可以分为三层:

  • 驱动程序层:
    • 数据库和SQL API层之间的底层通信
    • 示例类:QSqlDriver, QSqlDriverCreator
  • SQL API层
    • 提供数据库的访问程序
    • 示例类:QSqlDatabase, QSqlQuery
  • 用户界面层:
    • 将数据从数据库链接到数据感知小部件
    • 示例类:QSqlQueryModel (readonly), QSqlTableModel (读写), QSqlRelationalTableModel (读写与外键支持)

除了SQLite之外,所有SQL驱动程序都可以连接到托管数据库系统的服务器。如果您使用嵌入式MySQL服务器,则不需要MySQL服务器来使用该数据库系统

有关如果构建SQL数据库驱动程序的说明,请参阅SQL 数据库驱动程序

Qt-SQLite插件非常适合本地存储,SQLite是一个关系数据库管理系统,包含在一个小的C库中(~350kib)。与其他数据库管理系统不同,SQLite不是从客户机应用程序访问的单独进程,而是它的一个组成部分。SQLite操作单个文件,打开连接时必须将其设置为数据库名称。如果文件不存在,SQLite将尝试创建它

SQLite对多个用户和多个事务有一些限制。如果从不同的事务读取或者写入文件,则应用程序可能被冻结,直到一个事务提交或者回滚

设置驱动程序部分后,可以使用类QSqlQueryModel、QSqlTableModelQSqlRelationalTableModel访问数据。

  • QSqlTableModelQSqlRelationalTableModel提供可编辑的模型,可用于Qt的项目视图。
  • QSqlTableModel具有对单个表的读/写访问权限,
  • QSqlRelationalTableModel具有对主表的读/写访问权限(不具有外键的表)。

以下页面包含有关将SQL合并到应用程序中的信息:

Qt中的XML支持

Qt提供API来读取和解析XML流,以及写入这些流。以下关键类通过提供必要的基础结构来促进这些操作

  • QXmlStreamReader类提供了一个读取XML的解析器。它是格式良好的XML 1.0解析器,不包含外部解析的实体。

    • 它了解并解析XML名称空间。例如,在使用StartElement的情况下,namespaceUri()返回元素所在的名称空间,而name()返回元素的本地名称。namespaceUri()和name()的组合唯一标识一个元素。
    • 它不会占用大量CPU,因为它不会将整个XML文档树存储在内存中。它仅在报告时存储当前令牌。
  • QXmlStreamWriter类为XML编写器提供了一个简单的流API。它与QXmlStreamReader相对应,用于编写XML,并在用setDevice()指定的QIODevice上操作。

    • 它是一个简单的API,为您要编写的每个XML令牌或事件提供一个专用函数。
    • 它负责在编写元素或属性时根据指定的namespaceUri为名称空间添加前缀。如果必须使用某些标准化的前缀,可以通过使用writeNamespace()或writeDefaultNamespace()手动声明名称空间来强制编写器使用它们。
    • 它可以通过添加换行符和缩进自动格式化生成的XML数据,使其可读。可以使用“自动设置格式”属性启用此功能。
    • 默认情况下,它用UTF-8编码XML。可以使用setCodec()强制执行不同的编码。

除了读写XML流之外,Qt还为以下其他用例提供API:

  • 使用XQuery和XPath查询XML数据源
  • 使用XSLT进行XML转换
  • XML模式验证

以下主题提供了对Qt XML支持的更多了解:

Qt中的JSON

JSON是用于数据交换的基于文本的开放标准,易于阅读和解析。它用于表示简单的数据结构和关联数组,称为对象。它与JavaScript有关,但是是一种独立于语言的表示形式。

一个对象可以采用两种形式:

  • 名称/值对的集合
  • 值的有序列表
{ "last_name": "Routledge", "first_name": "Ronald", "birth_date": 1960 }
"colours": ["green", "blue", "yellow"]

本地存储

本地存储API提供了从QML和JavaScript访问SQL数据库中的本地脱机存储的能力。

这些数据库是特定于用户和QML的,但是所有QML应用程序都可以访问。它们作为SQLite数据库(SQL数据库驱动程序)存储在QDeclarativeEngine::offlineStoragePath()的Databases子目录中。

该API符合html5web数据库API的同步API,W3C工作草案2009年10月29日(html5web数据库API)。

有关使用本地存储API的基本演示,请参见Qt快速示例-本地存储。

QSettings类

QSettings类提供了应用程序设置的持久存储。应用程序通常会记住上一个会话中的设置

设置在不同的平台上以不同的方式存储。例如,在Windows上,它们存储在注册表中,而在macOS上,它们存储在XML文件中。

QSettings使您能够以可移植的方式保存和恢复应用程序设置。构造和销毁QSettings对象既轻量级又快速。在创建QSettings对象时,不仅要指定应用程序的名称,还要指定组织的名称,这是一种很好的做法。例如:

QSettings settings("MyCompany", "Accountancy");

资源

Qt资源系统是一种独立于平台的机制,用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序经常需要某个文件或一组文件,这将非常方便。它还可以防止特定文件丢失。

资源数据可以被编译成二进制并在应用程序代码中立即访问,也可以由应用程序动态创建二进制资源并在资源系统中注册。

默认情况下,可以通过与存储在源代码树中的文件名相同的文件名,使用:/prefix,或通过带有qrc方案的URL,从应用程序代码访问资源。

文件归档

归档文件是文件或目录的集合,通常会对其进行压缩,以减少它们在驱动器上可能会占用的空间。存档文件的示例为ZIP,TAR,RAR和7z。

Qt支持zlib生成的存档(请参阅qCompress()和qUncompress())。

  • 0
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值