gpt4 book ai didi

c++ - 如何在单行代码中使用大括号语法使用 QJsonObjects 创建 QJsonArray?

转载 作者:行者123 更新时间:2023-11-30 05:18:03 26 4
gpt4 key购买 nike

假设我有一个名为 groupBoxFlags(JSON 名称:flags)的 checkable QGroupBox,它有四个 QCheckBoxcheckBoxFlag1 命名为 checkBoxFlag4(JSON 名称:flag1,...,flag4 ) 每个都包含一个 bool 值,用于在我的应用程序中启用特定设置。我想处理多种情况:

  • 如果 groupBoxFlags 未被 选中 - 在 JSON 文档中,flags 将变为 bool 值并将设置为 false
  • groupBoxFlags 已选中,但所有复选框都选中 - 与上述情况相同
  • groupBoxFlags 已选中并且至少选中了一个复选框 - 在内部存储一个包含所有复选框值的数组

处理这个的代码如下:

  QList<bool> flagVals;
flagVals << ui->checkBoxFlag1->isChecked()
<< ui->checkBoxFlag2->isChecked()
<< ui->checkBoxFlag3->isChecked()
<< ui->checkBoxFlag4->isChecked();

// Counter the number of occurences of TRUE
int enabledFlags = flagVals.count(true);

// If flag groupbox is enabled and any of the types of swipe is enabled
if (ui->groupBoxFlags->isChecked() && enabledFlags > 0) {
QJsonObject flag1;
flag1["flag1"] = ui->checkBoxFlag1->isChecked();
// ...
QJsonObject swipeWE;
flag4["flag4"] = ui->checkBoxFlag4->isChecked();

QJsonArray flags = {flag1, ..., flag4};
stateObject["flags"] = flags;
}
else stateObject["flags"] = false;

虽然这没有任何问题,但我看到 Qt 支持用于创建对象和数组的大括号语法(示例取自 herehere):

QJsonObject

QJsonObject object
{
{"property1", 1},
{"property2", 2}
};

QJsonArray

QJsonArray array = { 1, 2.2, QString() };

我决定检查一下(与上面的代码相比肯定节省了一些写作)但是我不知道如何做一个一行(可以分布在多行中为了更好的可读性,但必须只有一个分号)。

下面的代码是我得到的:

QJsonObject flag1{{"flag1", ui->checkBoxFlag1->isChecked()}};
// ...
QJsonObject flag4{{"flag4", ui->checkBoxFlag4->isChecked()}};

QJsonArray flags = {flag1, ..., flag4};
stateObject["flags"] = flags;

是否有可能比这个更小?我实际上试过像这样把所有这些放在一起

QJsonArray flags = {
{{"flag1", ui->checkBoxFlag1->isChecked()}},
...
{{"flag4", ui->checkBoxFlag4->isChecked()}}
}; // Error HERE
stateObject["flags"] = flags;

但似乎 QJsonObjectQJsonArray 是必需的,因为我得到了错误

/home/user/QtProjects/JsonSaveState/widget.cpp:64: error: conversion from ‘<brace-enclosed initializer list>’ to ‘QJsonValue’ is ambiguous
};
^

当然还有更进一步

stateObject["flags"] = {
{{"flag1", ui->checkBoxFlag1->isChecked()}},
...
{{"flag4", ui->checkBoxFlag4->isChecked()}}
};

也不行。这可能吗?

最佳答案

在 QJsonArray 中使用 QJsonObject:

QJsonArray flags   {
QJsonObject{{"flag1", ui->checkBoxFlag1->isChecked()}},
QJsonObject{{"flag4", ui->checkBoxFlag4->isChecked()}}
};

关于c++ - 如何在单行代码中使用大括号语法使用 QJsonObjects 创建 QJsonArray?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41910739/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com