0

简而言之,正在发生的事情是我正在制作QStringList对象,然后在前面手动添加一个名为“项目类型:”的条目。然后我从 JSON 文件中获取数据并将其添加到QStringList. 然后使用 a 的addItems功能为用户qcombobox做出QStringList选择选项。

当我拨打电话时,我的问题就来了addItems。它确实将项目中的项目添加QStringList到组合框中,但是当调用该行时,它还会将“项目类型:”(手动添加)添加到我的 JSON 数据中。这让我感到困惑,我不确定为什么会这样。我将在下面进行更详细的介绍。

我有一个 JSON 文件,其中包含一些必须读取的信息才能使我的程序正常工作。我正在使用nlohmann 的 JSON来解析文件中的数据。下面的代码读取数据并将 JSON 数据放入变量中js

using json = nlohmann::json;
static json js;

void readJsonSettings()
{
    std::ifstream ifs("C:/Dev/Qt/myproject/Settings.txt");
    js = json::parse(ifs);
}; 

我的 JSON 文件将如下所示:

{
Test:
{
Arr_Item:[1,2,3],
Sub_Item:
    {
    Item1 : [0,1,2,3],
    Item2 : [4,5,6,7],
    }
}
}

我还使用 QT 6 为用户构建 GUI。代码如下所示:

MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent)
    , ui(new Ui::MainWindow)
{
    ui->setupUi(this);

    readJsonSettings();
    
    QStringList itemKeyList;
    itemKeyList << "Item Types:";
    getKeys(itemKeyList , "Sub_Item");


    ui->item_comboBox->addItems(itemKeyList);
}

MainWindow::~MainWindow()
{
    delete ui;
}

getKeys函数如下所示:

void getKeys(QStringList &outKeyList, const char* lookUpKey, const std::string profileName = currentProfileName)
{

    for (auto it = js[profileName][lookUpKey].begin(); it != js[profileName][lookUpKey].end(); ++it)
    {
        outKeyList << QString::fromStdString(it.key());
    }
}

我知道该profileName变量可能令人困惑,但只知道用户可以选择不同的配置文件,这些配置文件将根据用户选择加载不同类型的数据,但与我的问题无关。对于此示例,profileName将是“测试”

对于此示例,该getKeys函数将返回一个"Item Types:","Item1","Item2". 然后当该ui->item_comboBox->addItems(itemKeyList);行被调用时,我存储的 JSON 数据js会变成:

{
Test:
{
Arr_Item:[1,2,3],
Sub_Item:
    {
    Item Types:[],
    Item1 : [0,1,2,3],
    Item2 : [4,5,6,7],
    }
}
}

经过长时间的解释,我的主要问题是如何/为什么调用 QT 函数会更改与 JSON 变量关联的数据?如何更改它以使其不会对其产生影响?

4

0 回答 0