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 | 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<QString,QVariant> &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) | ... | ... |