数据输入输出¶
Qt的数据输入输出
本页面概述了使用Qt检索和保存数据的各种方法。
保存和加载数据¶
QIODevice 类是 Qt Core 中所有文件和数据存储设备的基类。所有用于读取和写入数据的类都继承自它。
设备的示例包括QFile、QBuffer、QTcpSocket和QProcess。QFile用于通过QIODevice接口读取和写入文本、二进制文件和资源。QFile可以单独使用,或者更方便地与QTextStream或QDataStream一起使用。
QBuffer类为QByteArray提供了一个QIODevice接口。QTcpSocket使开发者能够建立TCP连接并传输数据流。QProcess用于启动外部程序,并读取和写入该进程。
输入/输出和网络(I/O相关类的列表)
文件和数据流函数
序列化数据¶
Qt API 提供了对多种使用场景下的数据序列化的支持。
Qt中的JSON支持提供了一个易于使用的C++ API来解析、修改和保存JSON数据
QDataStream 类提供了将二进制数据序列化到 QIODevice 的功能
Qt XML C++ 类提供了用于 XML 的 XML 流和 DOM 标准的 C++ 实现
数据库¶
Qt SQL 模块使用驱动程序插件与多个数据库 API 进行通信。Qt 提供了 SQLite、MySQL、DB2、Borland InterBase、Oracle、ODBC 和 PostgreSQL 的驱动程序。如果 Qt 没有提供所需的驱动程序,也可以开发自己的驱动程序。
Qt的SQL类可以分为3层:
层
目的
示例类
驱动层
SQL API 层
用户界面层
数据库与SQL API层之间的低级通信
提供对数据库的访问
将数据库中的数据链接到数据感知小部件
QSqlDriver, QSqlDriverCreator
QSqlDatabase, QSqlQuery
QSqlQueryModel (只读), QSqlTableModel (读写), QSqlRelationalTableModel (支持外键的读写)
对于所有的SQL驱动程序,除了SQLite之外,您可以连接到托管数据库系统的服务器。如果您使用嵌入式MySQL服务器,则不需要MySQL服务器即可使用该数据库系统。
有关如何构建SQL数据库驱动程序的说明,请参阅SQL Database Drivers。
Qt SQLite 插件非常适合本地存储。SQLite 是一个包含在小型(约350 KiB)C 库中的关系数据库管理系统。与其他数据库管理系统不同,SQLite 不是从客户端应用程序访问的独立进程,而是其不可分割的一部分。SQLite 操作在单个文件上,该文件在打开连接时必须设置为数据库名称。如果文件不存在,SQLite 将尝试创建它。
SQLite 在多用户和多事务方面有一些限制。如果您在不同的事务中对文件进行读取或写入,您的应用程序可能会冻结,直到一个事务提交或回滚。
一旦驱动程序部分设置完成,数据就可以通过类QSqlQueryModel、QSqlTableModel和QSqlRelationalTableModel访问。QSqlTableModel和QSqlRelationalTableModel提供了可编辑的模型,可以与Qt的项目视图一起使用。QSqlTableModel具有对单个表的读写访问权限,而QSqlRelationalTableModel具有对主表的读写访问权限(不包括外键表)。
以下页面包含有关将SQL集成到应用程序中的信息:
SQL编程
数据库类
执行SQL语句
使用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 标记或事件提供了专门的函数。
它根据在写入元素或属性时指定的 namespaceUri 来处理命名空间的前缀。如果你必须使用某些标准化的前缀,你可以通过使用 writeNamespace() 或 writeDefaultNamespace() 手动声明命名空间来强制写入器使用它们。
它可以通过添加换行符和缩进来自动格式化生成的 XML 数据,使其可读。此功能可以通过 auto-formatting 属性开启。
以下主题提供了对Qt XML支持的更多见解:
命名空间简介
XML 流处理
Qt中的JSON¶
JSON 是一种基于文本的开放标准,用于数据交换,易于阅读和解析。它用于表示简单的数据结构和关联数组,称为对象。它与 JavaScript 相关,但是一种独立于语言的表示形式。
一个对象可以有两种形式:
名称/值对的集合
有序的值列表
{ "last_name": "Routledge", "first_name": "Ronald", "birth_date": 1960 } "colors": ["green", "blue", "yellow"]
Qt中的JSON支持
保存和加载游戏
序列化转换器
本地存储¶
本地存储API提供了从QML和JavaScript访问SQL数据库中的本地离线存储的能力。
这些数据库是用户特定和QML特定的,但所有QML应用程序都可以访问。它们作为SQLite数据库(SQL数据库驱动程序)存储在QDeclarativeEngine::offlineStoragePath()的Databases子目录中。
该API符合2009年10月29日W3C工作草案中的HTML5 Web数据库API的同步API(HTML5 Web Database API)。
请参阅Qt Quick示例 - 本地存储,了解使用本地存储API的基本演示。
Qt Quick 本地存储 QML 类型
QSettings 类¶
QSettings 类提供了应用程序设置的持久化存储。应用程序通常会记住其前一个会话的设置。
设置在不同的平台上存储方式不同。例如,在Windows上它们存储在注册表中,而在macOS上它们存储在XML文件中。
QSettings 使您能够以可移植的方式保存和恢复应用程序设置。构建和销毁 QSettings 对象是轻量级且快速的。在创建 QSettings 对象时,最好不仅指定应用程序的名称,还指定组织的名称。例如:
QSettings settings("MyCompany", "Accountancy");
资源¶
Qt资源系统是一种平台无关的机制,用于将二进制文件存储在应用程序的可执行文件中。如果您的应用程序经常需要某个文件或一组文件,这将非常方便。它还可以防止该特定文件的丢失。
资源数据可以编译到二进制文件中,并在应用程序代码中立即访问,或者可以动态创建二进制资源并由应用程序注册到资源系统中。
默认情况下,资源可以通过与源树中存储的文件名相同的文件名从应用程序代码中访问,带有:/前缀,或者通过带有qrc方案的URL访问。
连接性¶
Qt 串口
Qt Modbus
Qt CAN 总线
Qt 蓝牙
Qt NFC
文件归档¶
归档文件是文件或目录的集合,通常经过压缩以减少它们在驱动器上占用的空间。归档文件的例子有ZIP、TAR、RAR和7z。
Qt 支持由 zlib 生成的存档(参见 qCompress() 和 qUncompress() )。