我想知道保存QMultihash的最佳方法是什么。我正在考虑将其保存为 INI 文件,使用QSettings,但有没有更好的方法来做到这一点,让它也易于加载?序列化可能吗?
顺便说一句,我正在尝试做的是一个小 UI,它可以管理文件夹中的图像,由多种算法使用,并跟踪哪个算法正在使用哪些图像。
谢谢 !
我想知道保存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;
}
它将散列的每个项目存储为具有 2 个项目(键和值)的 QVariantList。
任何 QVariant 都可以使用 QSettings 保存。如果 QVariant 不支持您的键和值类型,您需要手动添加它们的支持。
如果您的键类型是 QString,代码可以被简化,因为QHash<QString, QVariant>
可以很容易地转换为 QVariant。
请注意,QMultiHash 只是一个方便的类,可以使用每个键具有多个值的常规 QHash。但是 QHash 也完全可以做到这一点。因此,为 QHash 找到的任何解决方案也可以应用于 QMultiHash。