06 json数据解析和列表控件

本文主要介绍了在Qt中对JSON数据进行处理的方法,包括QJsonDocument、QJsonArray、QJsonObject类的使用及JSON数据解析流程。还阐述了列表控件QListWidget的基本概念、创建方法、添加条目方式,以及条目的数目和选中情况,同时提及了其常用信号。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

内容回顾

json数据解析

  1. json ----- 对要传输的数据进行封装的工具
    json是由json数组([]) 和 json对象({})
  2. 在qt中,对JSON数据进行处理(解析和打包)
    JSON数据处理所要包含的类:
    QJsonDocument -----它的作用是将数据转换成json文档
    QJsonArray ---- json数组,就是封装多个实实在在的数据
    QJsonObject — json对象,就是一个实实在在的数据
    对于json数据而言,他们以键值对(key-value),想要获得真正有用数据,那么就要通过该数据的key
  3. json数据的 解析流程
第一步:将以后缀为.json文件,将它转换为QFile对象
第二步:打开文件
第三步:将从文件中读取的数据转换成 QJsonDocument
第四步:一定要根据json数据格式来进行解析
第五步:从json封装的数据中,获取到数据
第六步:应用数据

解析数据通常接口

QJsonDocument类:

  1. 解析时:
参数用途
QJsonArrayarray() const //通过get方法,得到QJsonDocument类中的json数组
QJsonObjectobject() const//通过get方法,得到QJsonDocument类中的json对象
  1. 打包时:
参数用途
voidsetArray(const QJsonArray &array)//将QJsonArray打包到QJsonDocument中
voidsetObject(const QJsonObject &object)
  1. 将QJsonDocument和QByteArray相互转换的接口:
    静态成员函数:
参数用途
QJsonDocumentfromJson(const QByteArray &json, QJsonParseError *error = nullptr)

功能:将QByteArray数据转换成QJsonDocument
参数说明:

  • const QByteArray &json ------ 从JSON文件中读取的数据
  • QJsonParseError *error ----- QByteArray在转换成QJsonDocument,出错时,它的出错信息
    做为一个输出参数
  1. 将QJsonDocment转换成QByteArray
    普通成员函数:
参数用途
QByteArraytoJson() const
QByteArraytoJson(QJsonDocument::JsonFormat format) const

功能:将QJsonDocment转换 成QByteArray,以便将数据写入到json文件中

QJsonArray类

  1. 获取json数组中的数据元素
参数用途
QJsonValueat(int i) const

参数说明:
int i ----- 数据元素的下标
返回值:成功返回一个QJsonValue
QJsonValue它是json中封装的一个数据类型,类似于int,char
,它可以跟int 、double、QString QJsonArray QJsonObject之间可以相互转换
它代表以下6种类型之一:
在这里插入图片描述

它们的相互之间的转换使用to方法:

参数用途
QJsonArraytoArray(const QJsonArray &defaultValue) const
QJsonArraytoArray() const
booltoBool(bool defaultValue = false) const
doubletoDouble(double defaultValue = 0) const
inttoInt(int defaultValue = 0) const
QJsonObjecttoObject(const QJsonObject &defaultValue) const
QJsonObjecttoObject() const
QStringtoString() const
QStringtoString(const QString &defaultValue) const
  1. 获取数组中 元素的个数
参数用途
intsize() const

QJsonObject类

  1. 根据键值来获得真正的数据
参数用途
QJsonValuevalue(const QString &key) const
QJsonValuevalue(QLatin1String key) const

参数说明:

  • const QString &key ------->键值就来源于json数据文档中键---- 都是字符串类型

比如: “genres”: “动作/惊悚/科幻”, ------ genres它就是键(key)
如果该键对应值为字符串,那么可以通过toString() const

一 列表控件— QListWidget

在这里插入图片描述

1.1 基本概念

当一个数据有多个时,将数据以列表的形式来显示,使用QListWidget,但是,该列表控件只负责显示,致于列表的内容是什么,它并不关心,比如:字符串,单一控件,自定义布局界面等
头文件:#include <QListWidget>
模块:QT += widgets
该类是用来显示item(列表条目),该条目通常使用QListWidgetItem(条目),该类提供了增加和删除条目的方法

1.2 创建该类对象的方法

  1. 通过构造函数来实现
QListWidget *listWidget = new QListWidget(this);
  1. 在qt 设计师,直接使用,则QT设计师来创建该对象
    在这里插入图片描述

1.2 向QListWidget控件上增加条目项

参数用途
voidaddItem(const QString &label)//增加一个字符串条目项
voidaddItem(QListWidgetItem *item)//增加一个列表条目项
voidaddItems(const QStringList &labels)//增加一个字符串列表条目项
voidsetItemWidget(QListWidgetItem *item, QWidget *widget)

参数说明:

  • QListWidgetItem *item ----- 要给QListWidget控件设置的条目
  • QWidget *widget ---- 给QListWidgetItem条目的具体内容为一个窗口小部件,比如:一个控件或者多个控件的界面
    该函数要跟addItem(QListWidgetItem *item)一起使用,是给指定的条目设置一个widget

关于QListWidgetItem类的构造函数形式:

参数
QListWidgetItem(const QIcon &icon, const QString &text, QListWidget *parent = nullptr, int type = Type)//创建一个条目项对象,并指定该条目项的内容和图标
QListWidgetItem(const QString &text, QListWidget *parent = nullptr, int type = Type) //创建一个条目项对象,并指定该条目项的内容
QListWidgetItem(QListWidget *parent = nullptr, int type = Type)

1.3 关于条目的数目和选中的条目

参数用途
intcount() const // 列表控件中条目的数目
QListWidgetItem *currentItem() const// 用户当前选中的列表条目
intcurrentRow() const// 用户当前选中的列表条目行号,行号是从零开始

案例:基本增加条目的使用方法

   //情景一  显示一个字符串item
ui->listWidget->addItem("条目一");

QStringList labels; //QStringList --- 该容器是专门用来存放字符串
//给labels容器赋值的方式如下:
labels<<"条目二"<<"条目三"<<"条目四";
 //情景二 显示一个字符串列表item
ui->listWidget->addItems(labels);

//情景三 显示一个QListWidgetItem
// 创建条目QListWidgetItem  ---- 条目只带文本
QListWidgetItem* item = new QListWidgetItem("条目五");
ui->listWidget->addItem(item);

//情景四 显示一个QListWidgetItem---- 条目是一个QWidget
//[1]创建条目QListWidgetItem
QListWidgetItem* item1 = new QListWidgetItem;
//[2] 将条目对象设置给listWidget控件
ui->listWidget->addItem(item1);
  QPushButton *button = new QPushButton("&Download", this);
  //[3]给条目对象设置一个QWidget:单个控件,自定义界面
ui->listWidget->setItemWidget(item1,button);

//情景五 创建条目QListWidgetItem --- 条目带文本和图片

QListWidgetItem* iocnitem = new QListWidgetItem(QIcon(":/image/cpp.png"),"main.cpp");
ui->listWidget->addItem(iocnitem);

1.4 QListWidget常用的信号

参数用途
voiditemClicked(QListWidgetItem *item)//单击条目时,控件会发送该信号
voiditemDoubleClicked(QListWidgetItem *item)//双击条目时,控件会发送该信号

当用户在代码中,建立与该信号相关的槽函数时,那么信号触发时,就会执行槽函数

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Lotay_天天

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值