QString Util::enumToString(const QVariant &value, const char *typeName, const QObject *object) { QByteArray enumTypeName(typeName); if (enumTypeName.isEmpty()) { enumTypeName = value.typeName(); } // strip of class name and namespace const int pos = enumTypeName.lastIndexOf("::"); if (pos >= 0) { enumTypeName = enumTypeName.mid(pos + 2); } const QMetaObject *mo = &ProtectedExposer::staticQtMetaObject; int enumIndex = mo->indexOfEnumerator(enumTypeName); if (enumIndex < 0 && object) { mo = object->metaObject(); enumIndex = mo->indexOfEnumerator(enumTypeName); } if (enumIndex < 0) { return QString(); } const QMetaEnum me = mo->enumerator(enumIndex); if (!me.isValid()) { return QString(); } return me.valueToKeys(value.toInt()); }
// Convert complex variant types to DOM properties with the help of QAbstractFormBuilder // Does not perform a check using QAbstractFormBuilder::checkProperty(). DomProperty *variantToDomProperty(QAbstractFormBuilder *afb, const QMetaObject *meta, const QString &pname, const QVariant &v) { const QFormBuilderStrings &strings = QFormBuilderStrings::instance(); DomProperty *dom_prop = new DomProperty(); dom_prop->setAttributeName(pname); const int pindex = meta->indexOfProperty(pname.toLatin1()); if (pindex != -1) { QMetaProperty meta_property = meta->property(pindex); if ((v.type() == QVariant::Int || v.type() == QVariant::UInt) && meta_property.isEnumType()) { const QMetaEnum e = meta_property.enumerator(); if (e.isFlag()) dom_prop->setElementSet(QString::fromAscii(e.valueToKeys(v.toInt()))); else dom_prop->setElementEnum(QString::fromAscii(e.valueToKey(v.toInt()))); return dom_prop; } if (!meta_property.hasStdCppSet() || (isOfType(meta, &QAbstractScrollArea::staticMetaObject) && pname == strings.cursorProperty)) dom_prop->setAttributeStdset(0); } // Try simple properties if (applySimpleProperty(v, isTranslatable(pname, v, meta), dom_prop)) return dom_prop; // Complex properties switch (v.type()) { case QVariant::Palette: { DomPalette *dom = new DomPalette(); QPalette palette = qvariant_cast<QPalette>(v); palette.setCurrentColorGroup(QPalette::Active); dom->setElementActive(afb->saveColorGroup(palette)); palette.setCurrentColorGroup(QPalette::Inactive); dom->setElementInactive(afb->saveColorGroup(palette)); palette.setCurrentColorGroup(QPalette::Disabled); dom->setElementDisabled(afb->saveColorGroup(palette)); dom_prop->setElementPalette(dom); } break; case QVariant::Brush: dom_prop->setElementBrush(afb->saveBrush(qvariant_cast<QBrush>(v))); break; default: delete dom_prop; if (afb->resourceBuilder()->isResourceType(v)) { dom_prop = afb->resourceBuilder()->saveResource(afb->workingDirectory(), v); if (dom_prop) dom_prop->setAttributeName(pname); break; } uiLibWarning(msgCannotWriteProperty(pname, v)); return 0; } return dom_prop; }
QString Db::flagsToString(Db::Flags flags) { int idx = staticMetaObject.indexOfEnumerator("Flag"); if (idx == -1) return QString::null; QMetaEnum en = staticMetaObject.enumerator(idx); return en.valueToKeys(static_cast<int>(flags)); }