Qt 不同数据类型转换

发布于:2024-03-22 ⋅ 阅读:(136) ⋅ 点赞:(0)

 一.不同类型数据转换示例:

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    //QString 转 QByteArray:
    QString str = "你好,世界!";
    QByteArray byteArray = str.toUtf8();
    qDebug()<<"byteArray::"<<byteArray;

    //QByteArray 转 QString:
    QByteArray byteArray2 = "你好,世界!";
    QString str1 = QString::fromUtf8(byteArray2);
    qDebug()<<"str::"<<str1;

    //QString 转 QObject
    QString aJsonStr = "{\"firstName\": \"Brett\",\"lastName\": \"McLaughlin\"}";
    QJsonDocument lJsonDoc = QJsonDocument::fromJson(aJsonStr.toUtf8());
    QJsonObject lJsonObj = lJsonDoc.object();
    qDebug()<<"firstName::"<<lJsonObj["firstName"].toString()<<"\n"
            <<"lastName::"<<lJsonObj["lastName"].toString();

    //QObject 转 QString
    QJsonDocument jsonDoc;
    jsonDoc.setObject(lJsonObj);
    QByteArray lJsonByte = jsonDoc.toJson(QJsonDocument::Compact);
    QString lJsonStr(lJsonByte);
    qDebug()<<"lJsonStr::"<<lJsonStr;

    return app.exec();
}

运行结果:

知识点补充 :QJsonDocument::Compact讲解

QJsonDocument::Compact是用于生成不包含空格和换行符的紧凑JSON字符串的选项

在Qt框架中,处理JSON数据时经常需要将JSON对象转换为字符串格式,以便于存储或传输。QJsonDocument类提供了这样的功能,它允许开发者将JSON对象转换成不同格式的字符串。具体到QJsonDocument::Compact,它的作用如下:

  1. 压缩格式化:使用QJsonDocument::Compact生成的JSON字符串不包含任何不必要的空白字符(如空格、制表符、换行符等),这使得JSON字符串尽可能紧凑,从而减少数据的大小,这对于网络传输或存储空间有限的场景非常有用。
  2. 方便解析:当接收端只需要解析JSON字符串的一部分时,紧凑格式由于其规律性,更易于截取和处理。
  3. 与Indented对比:与QJsonDocument::Indented选项相比,后者生成的JSON字符串会包含缩进和换行,使得人类阅读更加容易,但会增加字符串的长度。而QJsonDocument::Compact则正好相反,它生成的字符串体积更小,但可读性较差。
  4. 转换方法:要将QJsonDocument对象转换为紧凑格式的JSON字符串,可以使用toJson()成员函数并传入QJsonDocument::Compact作为参数。例如:QByteArray compactJson = jsonDoc.toJson(QJsonDocument::Compact);,其中jsonDoc是一个QJsonDocument对象。

综上所述,QJsonDocument::Compact是Qt提供的一个用于生成紧凑格式JSON字符串的选项,它有助于减小数据大小并简化部分解析的过程。在需要节省空间或传输数据的场合,使用这一选项会非常有帮助。

二.数据解析失败提示处理 

#include <QGuiApplication>
#include <QQmlApplicationEngine>
#include <QJsonDocument>
#include <QJsonObject>
#include <QDebug>

int main(int argc, char *argv[])
{
    QCoreApplication::setAttribute(Qt::AA_EnableHighDpiScaling);

    QGuiApplication app(argc, argv);

    //QString aJsonStr1 = "{\"firstName\": \"Brett\"\"lastName\": \"McLaughlin\"}";
    QString aJsonStr1 = "{\"firstName\": \"\"\"lastName\": \"McLaughlin\"}";
    //数据解析失败输出错误处理
    QJsonParseError lJsonParseError;
    QJsonDocument lJsonDoc1 = QJsonDocument().fromJson(aJsonStr1.toUtf8(), &lJsonParseError);
    if(lJsonParseError.error != QJsonParseError::NoError) {
        qWarning() << "Parse json failed: " << lJsonParseError.errorString();
        return {};
    }

    return app.exec();
}

运行结果:

本文含有隐藏内容,请 开通VIP 后查看

网站公告

今日签到

点亮在社区的每一天
去签到