数据输入输出
此页面提供了使用 Qt 检索和保存数据的多种方式的概述。
保存和加载数据
QIODevice 类是 Qt Core 中所有文件和数据存储设备的基础类。所有用于读取和写入数据的类都是从它继承的。
设备的例子有 QFile、QBuffer、QTcpSocket 以及 QProcess。 QIODevice 接口用于 QFile 读取和写入文本、二进制文件以及资源,使用 QIODevice 接口。可以单独使用 QFile,或者更方便地与 QTextStream 或 QDataStream 一起使用。
QBuffer 类为 QByteArray 提供了 QIODevice 接口。 QTcpSocket 可以让开发人员建立 TCP 连接并传输数据流。 QProcess 用于启动外部程序,并从这个进程读取和写入。
序列化数据
Qt API 为几个用例提供了数据序列化的支持。
- Qt 中的 JSON 支持提供了一个易于使用的 C++ API 来解析、修改和保存 JSON 数据
- QDataStream 类提供了将二进制数据序列化到 QIODevice 的功能
- Qt XML C++ 类 为 XML 提供了 C++ 实现的 XML 流和 DOM 标准接口
数据库
Qt SQL 模块使用驱动插件与多个数据库 API 进行通信。Qt 有 SQLite、MySQL、DB2、Borland InterBase、Oracle、ODBC 和 PostgreSQL 的驱动程序。如果 Qt 没有提供所需驱动程序,也可以开发自己的驱动程序。
Qt 的 SQL 类可分为 3 层
层 | 用途 | 示例类 |
---|---|---|
|
|
|
除了SQLite之外的SQL驱动程序都可以连接到托管您数据库系统的服务器。如果您使用嵌入式MySQL服务器,则不需要单独的MySQL服务器来使用该数据库系统。
有关构建SQL数据库驱动程序的说明,请参阅SQL数据库驱动程序。
Qt SQLite插件非常适合本地存储。SQLite是一个包含在小型(约350 KiB)C库中的关系型数据库管理系统。与其它数据库管理系统相比,SQLite不是一个从客户端应用程序访问的独立进程,而是其一个组成部分。SQLite在一个单一文件上操作,打开连接时必须将其设置为数据库名称。如果该文件不存在,SQLite将尝试创建它。
SQLite在多用户和多事务方面有一些限制。如果您在来自不同事务的文件上进行读写操作,应用程序可能会冻结,直到其中一个事务提交或回滚。
一旦设置好驱动程序部分,就可以使用以下类访问数据:QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel。 QSqlTableModel和QSqlRelationalTableModel提供了可编辑的模型,可以与Qt的项视图一起使用。QSqlTableModel可读写单个表,而QSqlRelationalTableModel可读写主表(而不是外键表)。
以下页面包含有关将SQL集成到应用程序中的信息
Qt中的XML支持
Qt提供了用于读取和解析XML流的API,也可以将内容写入这些流。以下关键类通过提供必要的框架,简化了这些操作:
- QDomDocument类表示整个XML文档作为文档树,并提供对文档数据的初级访问。
- 它提供了创建文档数据的几个函数,例如
createElement
()、createTextNode
()、createComment
()、createCDATASection
()、createProcessingInstruction
()、createAttribute
()和createEntityReference
()。
- 它提供了创建文档数据的几个函数,例如
- QXmlStreamReader类提供了一个用于读取XML的解析器。它是一个不包含外部分析的XML 1.0解析器。
- 它理解并解析XML命名空间。例如,对于StartElement,namespaceUri()返回元素所在的命名空间,而name()返回元素的本地名称。namespaceUri()和name()的组合可以唯一标识一个元素。
- 它不是一个CPU密集型操作,因为它不会将整个XML文档树存储在内存中。它只存储报告时的当前标记。
- QXmlStreamWriter类提供了一个具有简单流API的XML写入器。它是
QXmlStreamReader
的对应部分,用于写入XML,并且它在一个通过setDevice()指定的QIODevice上操作。- 它是一个简单的API,为每个要写入的XML标记或事件提供了一个专用函数。
- 它会在编写元素或属性时根据指定的命名空间URI添加命名空间前缀。如果您必须使用某些标准前缀,可以通过手动声明命名空间来强制写入器使用,这可以通过writeNamespace()或writeDefaultNamespace()方法完成。
- 它可以通过添加换行符和缩进来自动格式化生成的XML数据,使数据可读。可以通过自动格式化属性打开此功能。
以下主题提供更多关于Qt XML支持的信息
Qt中的JSON
JSON是一种基于文本的开放标准,易于阅读和解析,用于表示简单的数据结构和关联数组,称为对象。它与JavaScript相关,但是一种语言无关的表示形式。
对象可以采取两种形式
名称/值对的集合 | 值的有序列表 |
---|---|
{ "last_name": "Routledge", "first_name": "Ronald", "birth_date": 1960 } | "colors": ["green", "blue", "yellow"] |
本地存储
Local Storage API提供从QML和JavaScript访问本地SQLite数据库的能力。
这些数据库是特定于用户和QML的,但对所有QML应用程序都可访问。它们存储在QDeclarativeEngine::offlineStoragePath()的Databases子目录中,作为SQLite数据库。
该API符合HTML5 Web Database API的同步API,即W3C工作草案,2009年10月29日(HTML5 Web Database API)。
有关使用Local Storage API的基本演示,请参阅Qt Quick 示例 - 本地存储。
QSettings类
QSettings类提供了应用程序设置的持久化存储。应用程序通常会记住其以前会话中的设置。
不同平台上的设置存储方式不同。例如,在Windows上它们存储在注册表中,而在macOS上它们存储在XML文件中。
QSettings允许您以可携带的方式保存和恢复应用程序设置。构建和销毁QSettings对象是轻量级和快速的。在创建QSettings对象时,除了指定应用程序的名称外,还应指定您组织的名称。例如
QSettings settings("MyCompany", "Accountancy");
资源
Qt资源系统是一种平台无关的机制,用于在应用程序的可执行文件中存储二进制文件。如果您的应用程序经常需要某个文件或一组文件,这很有用。它还可以防止该特定文件丢失。
资源数据可以编译到二进制文件中,并在应用程序代码中立即访问,或者可以动态创建二进制资源,并由应用程序将其与资源系统一起注册。
默认情况下,资源可以通过与应用程序源代码中相同的文件名访问,通过添加:/
前缀,或通过具有qrc方案的URL。
连接性
文件归档
归档文件是文件或目录的集合,通常为了减少它们在驱动器上占用的空间而被压缩。归档文件的例子有ZIP、TAR、RAR和7z。
Qt支持由zlib生成的归档(参见qCompress()和qUncompress())。
© 2024 Qt公司有限 公司。 本文档中包含的贡献是各自的版权拥有者的版权。 本文档是按照自由软件基金会发布的GNU自由文档许可证版本1.3的条款提供许可的。Qt及其相关标志是福兰斯isin和其他全球国家的Qt公司有限公司的商标。所有其他商标归其各自所有者所有。