Commit 85ee2f90aafdcf195bdbb9e480172f183ea045b2
1 parent
967d7b03
improve support for converting back to strings
Showing
1 changed file
with
18 additions
and
7 deletions
openbr/openbr_plugin.cpp
| ... | ... | @@ -166,10 +166,10 @@ QVariant File::parse(const QString &value) |
| 166 | 166 | void File::set(const QString &key, const QString &value) |
| 167 | 167 | { |
| 168 | 168 | if (value.startsWith('[') && value.endsWith(']')) { |
| 169 | - QList<QVariant> variants; | |
| 169 | + QVariantList variants; | |
| 170 | 170 | foreach (const QString &value, QtUtils::parse(value.mid(1, value.size()-2))) |
| 171 | 171 | variants.append(parse(value)); |
| 172 | - set(key, QVariant(variants)); | |
| 172 | + set(key, variants); | |
| 173 | 173 | } else { |
| 174 | 174 | set(key, QVariant(parse(value))); |
| 175 | 175 | } |
| ... | ... | @@ -806,9 +806,7 @@ void Object::setProperty(const QString &name, QVariant value) |
| 806 | 806 | value = v; |
| 807 | 807 | } else if ((type.startsWith("QList<") && type.endsWith(">")) || (type == "QStringList") || (type == "QVariantList")) { |
| 808 | 808 | QVariantList elements; |
| 809 | - if (value.canConvert<QVariantList>()) { | |
| 810 | - elements = value.value<QVariantList>(); | |
| 811 | - } else if (value.canConvert< QList<Transform*> >()) { | |
| 809 | + if (value.canConvert< QList<Transform*> >()) { | |
| 812 | 810 | foreach (Transform *transform, value.value< QList<Transform*> >()) |
| 813 | 811 | elements.append(QVariant::fromValue(transform)); |
| 814 | 812 | } else if (value.canConvert<QString>()) { |
| ... | ... | @@ -817,6 +815,8 @@ void Object::setProperty(const QString &name, QVariant value) |
| 817 | 815 | qFatal("Expected a list to start with '[' and end with 'brackets']'."); |
| 818 | 816 | foreach (const QString &element, parse(string.mid(1, string.size()-2))) |
| 819 | 817 | elements.append(element); |
| 818 | + } else if (value.canConvert<QVariantList>()) { | |
| 819 | + elements = value.value<QVariantList>(); | |
| 820 | 820 | } else { |
| 821 | 821 | qFatal("Expected a list."); |
| 822 | 822 | } |
| ... | ... | @@ -825,8 +825,19 @@ void Object::setProperty(const QString &name, QVariant value) |
| 825 | 825 | value.setValue(elements); |
| 826 | 826 | } else if ((type == "QList<QString>") || (type == "QStringList")) { |
| 827 | 827 | QStringList parsedValues; |
| 828 | - foreach (const QVariant &element, elements) | |
| 829 | - parsedValues.append(element.toString()); | |
| 828 | + foreach (const QVariant &element, elements) { | |
| 829 | + if (element.canConvert<QString>()) { | |
| 830 | + parsedValues.append(element.toString()); | |
| 831 | + } else if (element.canConvert<QPointF>()) { | |
| 832 | + const QPointF point = element.toPointF(); | |
| 833 | + parsedValues.push_back(QString("(%1,%2)").arg(QString::number(point.x()), QString::number(point.y()))); | |
| 834 | + } else if (element.canConvert<QRectF>()) { | |
| 835 | + const QRectF rect = element.toRectF(); | |
| 836 | + parsedValues.push_back(QString("(%1,%2,%3,%4)").arg(QString::number(rect.x()), QString::number(rect.y()), QString::number(rect.width()), QString::number(rect.height()))); | |
| 837 | + } else { | |
| 838 | + qFatal("Can't convert variant to string."); | |
| 839 | + } | |
| 840 | + } | |
| 830 | 841 | value.setValue(parsedValues); |
| 831 | 842 | } else if (type == "QList<float>") { |
| 832 | 843 | QList<float> parsedValues; bool ok; | ... | ... |