我的QList类列表在这里存储了什么

时间:2018-10-05 08:00:56

标签: c++ qt qlist

我正在经历一个Qt项目,并且我无法理解QList上的部分代码。在以下代码中,我知道Q_ASSERT的作用。我误解了我的名为keyItemPairs的列表将存储什么?

void NTCommunicationController::processStartupMessage(const QJsonObject &params)
{
  Q_ASSERT(m_systemSettings);

  QList<QPair<QString, NTEditorModelItem*>> keyItemPairs =
  {{QString(NTParameterSetMessage::SU_BSP_VERSION),    m_systemSettings->getBspVersion()},
   {QString(NTParameterSetMessage::SU_KERNEL_VERSION), m_systemSettings->getKernelVersion()},
   {QString(NTParameterSetMessage::SU_APP_VERSION),    m_systemSettings->getApplicationVersion()},
   {QString(NTParameterSetMessage::SU_FW_VERSION),     m_systemSettings->getFirmwareVersion()},
   {QString(NTParameterSetMessage::SU_PIN_CODE),       m_systemSettings->getPincodeSetting()}
  };
  applyValuesToModelItems(params, keyItemPairs, true);
}

2 个答案:

答案 0 :(得分:3)

它确切存储了名称告诉您的内容。它是对象的列表,其中每个元素都是一对值。在这种特殊情况下,QPair<QString, NTEditorModelItem*>

QPair<>(或类似的std::pair<>)视为一种将两个关联值存储在单个对象中的方法。

如果您更熟悉这种方法,则可以使用具有两个字段的结构来实现相同的目的。例如:

struct Entry {
    QString value;
    NTEditorModelItem* model;
};

QList<Entry> items = {{NTParameterSetMessage::SU_BSP_VERSION, m_systemSettings->getBspVersion()},
                      {NTParameterSetMessage::SU_KERNEL_VERSION), m_systemSettings->getKernelVersion()}
}

您将获得几乎相同的功能。但是,使用结对模板,您不必创建单独的结构即可将值绑定在一起。

答案 1 :(得分:1)

如代码中所示,该列表存储了QPair<QString, NTEditorModelItem*>类型的项目。

使用5个值初始化。第一个是(NTParameterSetMessage::SU_BSP_VERSION), m_systemSettings->getBspVersion())