Commit e292ba1af3e424d4d3b31159367c4f5429a6936e
1 parent
9afd250b
Adding and exporting a few more useful qtutils
Showing
2 changed files
with
79 additions
and
0 deletions
openbr/core/qtutils.cpp
| @@ -27,6 +27,7 @@ | @@ -27,6 +27,7 @@ | ||
| 27 | #include <QRegularExpression> | 27 | #include <QRegularExpression> |
| 28 | #include <QStack> | 28 | #include <QStack> |
| 29 | #include <QUrl> | 29 | #include <QUrl> |
| 30 | +#include <QJsonArray> | ||
| 30 | #include <openbr/openbr_plugin.h> | 31 | #include <openbr/openbr_plugin.h> |
| 31 | 32 | ||
| 32 | #include "alphanum.hpp" | 33 | #include "alphanum.hpp" |
| @@ -453,6 +454,78 @@ QStringList toStringList(const QMap<QString,QVariant> &variantMap) | @@ -453,6 +454,78 @@ QStringList toStringList(const QMap<QString,QVariant> &variantMap) | ||
| 453 | return variants; | 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 | QString toTime(int s) | 529 | QString toTime(int s) |
| 457 | { | 530 | { |
| 458 | int h = s / (60*60); | 531 | int h = s / (60*60); |
openbr/core/qtutils.h
| @@ -29,6 +29,7 @@ | @@ -29,6 +29,7 @@ | ||
| 29 | #include <QString> | 29 | #include <QString> |
| 30 | #include <QStringList> | 30 | #include <QStringList> |
| 31 | #include <QThreadPool> | 31 | #include <QThreadPool> |
| 32 | +#include <QJsonObject> | ||
| 32 | #include <string> | 33 | #include <string> |
| 33 | #include <vector> | 34 | #include <vector> |
| 34 | 35 | ||
| @@ -80,6 +81,11 @@ namespace QtUtils | @@ -80,6 +81,11 @@ namespace QtUtils | ||
| 80 | QString toString(const QVariantList &variantList); | 81 | QString toString(const QVariantList &variantList); |
| 81 | BR_EXPORT QString toString(const QVariantMap &QVariantMap); | 82 | BR_EXPORT QString toString(const QVariantMap &QVariantMap); |
| 82 | BR_EXPORT QStringList toStringList(const QVariantMap &QVariantMap); | 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 | template <typename T> | 90 | template <typename T> |
| 85 | QVariantList toVariantList(const QList<T> &list) | 91 | QVariantList toVariantList(const QList<T> &list) |