まず、単純にオブジェクトを作ってみる。

    QJsonObject jsonObj;
    jsonObj["hoge"] = "hoge";
    jsonObj["hoge2"] = "hoge2";

    QJsonDocument jsonDoc(jsonObj);

    printf("%s\n", qPrintable(QString::fromUtf8(jsonDoc.toJson())));

これを実行すると

{
    "hoge": "hoge",
    "hoge2": "hoge2"
}

配列にオブジェクトを2つ入れたのを作ってみる。

    QJsonObject jsonObj;
    jsonObj["hoge"] = "hoge";
    jsonObj["hoge2"] = "hoge2";

    QJsonObject jsonObj2;
    jsonObj2["hoge3"] = "hoge3";
    jsonObj2["hoge4"] = "hoge4";

    // 配列を用意してオブジェクトを2つ追加
    QJsonArray jsonArr;
    jsonArr.append(jsonObj);
    jsonArr.append(jsonObj2);

    QJsonDocument jsonDoc2(jsonArr);

    printf("%s\n", qPrintable(QString::fromUtf8(jsonDoc2.toJson())));

これを実行すると

[
    {
        "hoge": "hoge",
        "hoge2": "hoge2"
    },
    {
        "hoge3": "hoge3",
        "hoge4": "hoge4"
    }
]

オブジェクトの中に配列を入れてみる。

    QJsonObject jsonObj3;
    
    // 配列を用意する。
    QJsonArray jsonArr2;

    jsonArr2.append("hoge1");
    jsonArr2.append("hoge2");
    jsonArr2.append("hoge3");

    jsonObj3["hoge"] = jsonArr2;

    QJsonDocument jsonDoc3(jsonObj3);

    printf("%s\n", qPrintable(QString::fromUtf8(jsonDoc3.toJson())));

これを実行すると

{
    "hoge": [
        "hoge1",
        "hoge2",
        "hoge3"
    ]
}

次にJSONの文字列をQJsonObjectに変換する。

    QString jsonStr = "{\"hoge\":\"123\",\"hoge2\":\"456\"}";
    QJsonDocument jsonDoc4(QJsonDocument::fromJson(jsonStr.toUtf8()));

    QJsonObject jsonObj4(jsonDoc4.object());
    auto hoge = jsonDoc4["hoge"].toString();
    auto hoge2 = jsonDoc4["hoge2"].toString();

    printf("hoge:%s\nhoge2:%s\n", qPrintable(hoge), qPrintable(hoge2));

これを実行すると

hoge:123
hoge2:456