持久的QMultihash

时间:2013-06-11 12:25:11

标签: c++ qt

我想知道保存QMultihash的最佳方法是什么。 我正在考虑使用QSettings将其保存为INI文件,但有没有更好的方法来实现它,使其也可以轻松加载?序列化可能吗?

我正在尝试做什么,顺便说一下,它是一个小UI,它可以管理文件夹中的图像,由多种算法使用,并跟踪哪种算法正在使用哪些图像。

谢谢!

1 个答案:

答案 0 :(得分:1)

没有标准的方法,特别是对于任意键和值类型。

以下是如何将QMultiHash<int, double>转换为QVariant并返回的示例:

QVariant convert(QMultiHash<int, double> hash) {
  QVariantList variant_hash;
  for(QMultiHash<int, double>::Iterator it = hash.begin(); it != hash.end(); ++it) {
    QVariantList list;
    list << it.key();
    list << it.value();
    variant_hash << QVariant(list);
  }
  return variant_hash;
}

QMultiHash<int, double> convert_back(QVariant variant_hash) {
  QMultiHash<int, double> new_hash;
  foreach(QVariant item, variant_hash.toList()) {
    new_hash.insertMulti(item.toList()[0].toInt(), item.toList()[1].toDouble());
  }
  return new_hash;
}

它将散列的每个项目存储为QVariantList,包含2个项目(键和值)。

可以使用QSettings保存任何QVariant。如果QVariant不支持您的键和值类型,则需要手动添加其支持。

如果你的密钥类型是QString,代码可以简化,因为QHash<QString, QVariant>可以很容易地转换为QVariant。

请注意,QMultiHash只是一个方便的类,可以使用常规QHash,每个键有多个值。但QHash也完全适用于此。因此,QHash的任何解决方案都可以应用于QMultiHash。