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

What does my list of QList class stores here

我正在研究一个 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);
}

如代码所示,列表存储 QPair<QString, NTEditorModelItem*>.

类型的项目

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

它存储的正是它的名字所告诉你的。它是一个对象列表,其中每个元素都是一对值。在这种特殊情况下 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()}
}

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