假设我有一个名为QGroupBox
(JSON名称:groupBoxFlags
)的可检查 flags
,其中有四个名为QCheckBox
的checkBoxFlag1
到checkBoxFlag4
(JSON名称:flag1
,...,flag4
),每个持有一个boolean值以在应用程序中启用特定设置。我想处理多种情况:
groupBoxFlags
将变为 bool(boolean) 值,并将其设置为flags
false
被选中,但所有复选框都被选中和-与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支持大括号语法来创建对象和数组(示例取自here和here):
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;
但似乎
groupBoxFlags
和QJsonObject
是强制性的,因为我得到了错误/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/