Я использую QVariant
для управления настройками проекта нашего собственного приложения.
Для этого я использую вложенную QVariantMap
рекурсивную таблицу, содержащую QVariantMap
s, и оставляет фактические данныезначения.
Теперь я обнаружил, что довольно сложно устанавливать и удалять узлы из этой древовидной структуры.Особенно, если вложение достигает определенной глубины.
Часть проблемы заключается в том, что value<T>
возвращает копию вместо ссылки.(Мне интересно, почему в Qt отсутствует эта функция ??)
#include <QVariantMap>
#include <QDebug>
int main(int argc, char** args) {
QVariantMap map = { {"A", QVariantMap{ {"B",5.} }} };
{
// Change value
auto nested = map["A"].value<QVariantMap>();
nested["B"] = 6;
map["A"] = nested;
qDebug() << map;
// What it should be
// map["A"]["B"] = 5;
}
{
// Remove value
auto nested = map["A"].value<QVariantMap>();
nested.remove("B");
map["A"] = nested;
qDebug() << map;
// What it should be
// map["A"].remove("B");
}
}
Какой может быть самый простой способ непосредственно устанавливать и удалять значения и делать мою функцию однострочной?Производительность не критична, но простота использования - определенно проблема для меня.