假设我有一个名为QGroupBox(JSON名称:groupBoxFlags)的可检查 flags,其中有四个名为QCheckBoxcheckBoxFlag1checkBoxFlag4(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支持大括号语法来创建对象和数组(示例取自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;
    

    但似乎groupBoxFlagsQJsonObject是强制性的,因为我得到了错误
    /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/

    10-13 07:04