简而言之,正在发生的事情是我正在制作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 变量关联的数据?如何更改它以使其不会对其产生影响?