QMultihash的持久化

Persistence of a QMultihash

本文关键字:持久化 QMultihash      更新时间:2023-10-16

我想知道保存QMultihash的最佳方法是什么。我正在考虑将其保存为INI文件,使用QSettings,但是否有更好的方法来做到这一点,使其也易于加载?可能是序列化?

我想做的是,顺便说一句,是一个小的UI,可以管理文件夹中的图像,由几个算法使用,并跟踪哪个算法正在使用哪个图像。

谢谢!

没有标准的方法来做到这一点,特别是对于任意键和值类型。

下面是一个如何将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项(键和值)。

任何QVariant都可以使用QSettings保存。如果你的键和值类型不被QVariant支持,你需要手动添加它们的支持。

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

请注意,QMultiHash只是一个方便的类,可以使用每个键有多个值的常规QHash。但是QHash在这方面也有完整的功能。因此,为QHash找到的任何解决方案也可以应用于QMultiHash。