c++ - 我的 QList 类列表在这里存储什么

标签 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);
}

最佳答案

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

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

关于c++ - 我的 QList 类列表在这里存储什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52660967/

相关文章:

c# - 如何防止windows mobile图片框闪烁

c++ - 无法推断 VS 2010 中的模板参数

c++ - 从 C++ Qt 应用程序中的 python 脚本读取输出

c++ - 来自 .ui 文件的 Qt : How to generate . h 和 .cpp - Vim 和 Qt 实用吗?

c++ - 遍历作为 QList<int> 的 QVariant?

c++ - STL 容器和算法 C++

c++ - 窗口不显示图像 SDL

python - 带有 QSizePolicy.Expanding 的 setSizePolicy() 不起作用 : the child does not expand to the size of the parent

c++ - Qt:如何处理源自 Qt 类内部的崩溃?

c++ - 从 QML 访问 C++ QLists