Commit e292ba1af3e424d4d3b31159367c4f5429a6936e

Authored by Scott Klum
1 parent 9afd250b

Adding and exporting a few more useful qtutils

openbr/core/qtutils.cpp
... ... @@ -27,6 +27,7 @@
27 27 #include <QRegularExpression>
28 28 #include <QStack>
29 29 #include <QUrl>
  30 +#include <QJsonArray>
30 31 #include <openbr/openbr_plugin.h>
31 32  
32 33 #include "alphanum.hpp"
... ... @@ -453,6 +454,78 @@ QStringList toStringList(const QMap&lt;QString,QVariant&gt; &amp;variantMap)
453 454 return variants;
454 455 }
455 456  
  457 +QJsonValue fromVariant(const QVariant &variant)
  458 +{
  459 + // Convert any formats that can be natively stored as JSON
  460 + if (variant.canConvert<bool>() || variant.canConvert<double>() || variant.canConvert<QString>())
  461 + return QJsonValue::fromVariant(variant);
  462 +
  463 + // If array, recurse
  464 + if (variant.canConvert<QVariantList>()) {
  465 + QJsonArray jsonArray;
  466 + foreach (const QVariant &v, variant.toList())
  467 + jsonArray.append(fromVariant(v));
  468 + return QJsonValue(jsonArray);
  469 + }
  470 +
  471 + return QJsonValue(QtUtils::toString(variant));
  472 +}
  473 +
  474 +QJsonObject fromVariantMap(const QVariantMap &variantMap)
  475 +{
  476 + QJsonObject jsonObject;
  477 + QMap<QString, QVariant>::const_iterator i;
  478 + for (i = variantMap.begin(); i != variantMap.end(); i++)
  479 + jsonObject.insert(i.key(), fromVariant(i.value()));
  480 + return jsonObject;
  481 +}
  482 +
  483 +QVariant fromJsonValue(const QJsonValue &value)
  484 +{
  485 + QVariant variant;
  486 + QJsonValue::Type t = value.type();
  487 + if (t == QJsonValue::Null)
  488 + return QVariant();
  489 + else if (t == QJsonValue::Bool || t == QJsonValue::Double)
  490 + return value.toVariant();
  491 + else if (t == QJsonValue::String)
  492 + return QtUtils::fromString(value.toString());
  493 + else if (t == QJsonValue::Array) {
  494 + const QJsonArray array = value.toArray();
  495 + QVariantList variantList;
  496 + foreach (const QJsonValue &arrayValue, array)
  497 + variantList.append(fromJsonValue(arrayValue));
  498 + return variantList;
  499 + } else if (t == QJsonValue::Object)
  500 + return fromJsonObject(value.toObject());
  501 + else // QJsonValue::Undefined
  502 + return QVariant();
  503 +}
  504 +
  505 +QVariantMap fromJsonObject(const QJsonObject &object)
  506 +{
  507 + QVariantMap variantMap;
  508 + foreach (const QString &key, object.keys())
  509 + variantMap.insert(key, fromJsonValue(object.value(key)));
  510 + return variantMap;
  511 +}
  512 +
  513 +QVariant fromString(const QString &value)
  514 +{
  515 + bool ok = false;
  516 + const QPointF point = QtUtils::toPoint(value, &ok);
  517 + if (ok) return point;
  518 + const QRectF rect = QtUtils::toRect(value, &ok);
  519 + if (ok) return rect;
  520 + const cv::RotatedRect rotatedRect = OpenCVUtils::rotateRectFromString(value, &ok);
  521 + if (ok) return QVariant::fromValue(rotatedRect);
  522 + const int i = value.toInt(&ok);
  523 + if (ok) return i;
  524 + const float f = value.toFloat(&ok);
  525 + if (ok) return f;
  526 + return value;
  527 +}
  528 +
456 529 QString toTime(int s)
457 530 {
458 531 int h = s / (60*60);
... ...
openbr/core/qtutils.h
... ... @@ -29,6 +29,7 @@
29 29 #include <QString>
30 30 #include <QStringList>
31 31 #include <QThreadPool>
  32 +#include <QJsonObject>
32 33 #include <string>
33 34 #include <vector>
34 35  
... ... @@ -80,6 +81,11 @@ namespace QtUtils
80 81 QString toString(const QVariantList &variantList);
81 82 BR_EXPORT QString toString(const QVariantMap &QVariantMap);
82 83 BR_EXPORT QStringList toStringList(const QVariantMap &QVariantMap);
  84 + BR_EXPORT QVariant fromString(const QString &value);
  85 + BR_EXPORT QJsonValue fromVariant(const QVariant &variant);
  86 + BR_EXPORT QJsonObject fromVariantMap(const QVariantMap &variantMap);
  87 + BR_EXPORT QVariant fromJsonValue(const QJsonValue &value);
  88 + BR_EXPORT QVariantMap fromJsonObject(const QJsonObject &object);
83 89  
84 90 template <typename T>
85 91 QVariantList toVariantList(const QList<T> &list)
... ...