QT各种数据结构

1. QAbstractItemModel

1.1简介

  • QAbstractItemModelQt 框架中用于实现自定义数据模型的抽象基类。
  • 它提供了一种通用的方式来组织和管理数据,并**将其呈现给 Qt 的视图部件(例如 QTreeView、QTableView 等)**进行显示。

1.2目的

  • QAbstractItemModel 的主要目的是将底层数据抽象为一个层次化的模型,这样 Qt 的视图部件可以使用通用的方式来访问和显示这些数据。
  • 通过继承 QAbstractItemModel,可以实现自己的数据模型,适应不同类型的数据源,并提供数据的查询、修改、排序和过滤等功能。

1.3方法和概念

  1. index()parent(): 这两个方法用于获取项item模型中的索引和其父项的索引。通过这些方法,可以构建模型的层次结构。
  2. rowCount()columnCount(): 这两个方法用于获取模型中行和列的数量子类需要实现这些方法,以提供模型的行和列信息。
  3. data()setData(): 这两个方法用于获取和设置项item的数据。当视图部件需要显示数据时,它会调用 data() 方法来获取数据。当用户对视图中的数据进行修改时,setData() 方法会被调用来更新模型中的数据。
  4. headerData(): 用于获取表头header的数据,例如表格的行标题和列标题。
  5. flags(): 用于获取项的标志flags,例如是否可编辑、是否可选中等。
  6. insertRows()removeRows(): 用于在模型中插入和移除行。
  7. insertColumns()removeColumns(): 用于在模型中插入和移除列。
  8. beginInsertRows()endInsertRows(): 这些方法用于通知视图部件模型中的数据发生了插入,视图可以相应地更新显示。
  9. beginRemoveRows()endRemoveRows(): 用于通知视图部件模型中的数据将要被移除。
  10. beginResetModel()endResetModel(): 用于重置整个模型,通知视图部件重新加载所有数据
  11. dataChanged(): 用于通知视图部件模型中的数据发生了改变。
  12. layoutChanged(): 用于通知视图部件模型的布局发生了改变,需要重新布局。

1.4总结

通过继承 QAbstractItemModel,可以根据自己的数据结构和业务需求来实现这些方法,并将数据以层次化结构提供给 Qt 的视图部件进行显示。这样,您可以使用通用的 Qt 视图组件来展示和操作您的自定义数据模型,提高了代码的可维护性和重用性。

2. QJsonDocument

2.1 简介

  • QJsonDocumentQt 框架中用于处理 JSON(JavaScript Object Notation)数据的类。
  • JSON 是一种轻量级的数据交换格式,常用于在不同的应用程序之间传输数据。
  • QJsonDocument 允许您在 Qt 应用程序中解析、创建和操作 JSON 数据。

2.2 方法

  1. QJsonDocument::fromJson(const QByteArray &json, QJsonParseError *error = nullptr):从一个 QByteArray(字节数组)解析 JSON 数据,返回一个 QJsonDocument 对象。
  2. QJsonDocument::toJson():将 QJsonDocument 对象中的 JSON 数据转换为 QByteArray
  3. QJsonDocument::isObject():检查 QJsonDocument 是否表示一个 JSON 对象。
  4. QJsonDocument::isArray():检查 QJsonDocument 是否表示一个 JSON 数组。
  5. QJsonDocument::isEmpty():检查 QJsonDocument 是否为空。
  6. QJsonDocument::object():获取 QJsonObject,如果 QJsonDocument 表示一个 JSON 对象。
  7. QJsonDocument::array():获取 QJsonArray,如果 QJsonDocument 表示一个 JSON 数组。
  8. QJsonDocument::setObject(const QJsonObject &object):将一个 QJsonObject 设置为 QJsonDocument 的内容。
  9. QJsonDocument::setArray(const QJsonArray &array):将一个 QJsonArray 设置为 QJsonDocument 的内容。
  10. QJsonDocument::toJson(QJsonDocument::JsonFormat format):将 QJsonDocument 转换为 JSON 格式的 QByteArray,可以选择不同的输出格式,如 CompactIndented

2.3 示例

#include <QCoreApplication>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    // 创建一个 JSON 对象
    QJsonObject person;
    person["name"] = "John";
    person["age"] = 30;
    person["isStudent"] = false;

    // 将 JSON 对象转换为 QJsonDocument
    QJsonDocument doc(person);

    // 将 QJsonDocument 转换为 JSON 格式的 QByteArray
    QByteArray jsonByteArray = doc.toJson(QJsonDocument::Indented);

    qDebug() << "JSON Data:";
    qDebug() << jsonByteArray;

    // 解析 JSON 数据
    QJsonDocument parsedDoc = QJsonDocument::fromJson(jsonByteArray);

    // 获取解析后的 JSON 对象
    QJsonObject parsedPerson = parsedDoc.object();

    // 从解析后的 JSON 对象中提取数据
    QString name = parsedPerson["name"].toString();
    int age = parsedPerson["age"].toInt();
    bool isStudent = parsedPerson["isStudent"].toBool();

    qDebug() << "\nExtracted Data:";
    qDebug() << "Name: " << name;
    qDebug() << "Age: " << age;
    qDebug() << "Is Student: " << isStudent;

    return a.exec();
}
  • 在此示例中,首先创建了一个 JSON 对象,然后将其转换为 QJsonDocument
  • 接着,将 QJsonDocument 转换为 JSON 格式的字节数组,并输出到控制台。
  • 然后,使用 QJsonDocument::fromJson 方法解析 JSON 数据,并从解析后的 JSON 对象中提取数据。
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值