0

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

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

谢谢 !

4

1 回答 1

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;
}

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

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

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

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

于 2013-06-11T12:46:01.590 回答