properties.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 643 行 · 第 1/2 页

CPP
643
字号
        return true;    case QVariant::ByteArray:        dom_prop->setElementCstring(QString::fromUtf8(v.toByteArray()));        return true;    case QVariant::Int:        dom_prop->setElementNumber(v.toInt());        return true;    case QVariant::UInt:        dom_prop->setElementUInt(v.toUInt());        return true;    case QVariant::LongLong:        dom_prop->setElementLongLong(v.toLongLong());        return true;    case QVariant::ULongLong:        dom_prop->setElementULongLong(v.toULongLong());        return true;    case QVariant::Double:        dom_prop->setElementDouble(v.toDouble());        return true;    case QVariant::Bool:        dom_prop->setElementBool(v.toBool() ? QLatin1String("true") : QLatin1String("false"));        return true;    case QVariant::Char: {        DomChar *ch = new DomChar();        const QChar character = v.toChar();        ch->setElementUnicode(character.unicode());        dom_prop->setElementChar(ch);    }        return true;    case QVariant::Point: {        DomPoint *pt = new DomPoint();        const QPoint point = v.toPoint();        pt->setElementX(point.x());        pt->setElementY(point.y());        dom_prop->setElementPoint(pt);    }        return true;    case QVariant::PointF: {        DomPointF *ptf = new DomPointF();        const QPointF pointf = v.toPointF();        ptf->setElementX(pointf.x());        ptf->setElementY(pointf.y());        dom_prop->setElementPointF(ptf);    }        return true;    case QVariant::Color: {        DomColor *clr = new DomColor();        const QColor color = qvariant_cast<QColor>(v);        clr->setElementRed(color.red());        clr->setElementGreen(color.green());        clr->setElementBlue(color.blue());        dom_prop->setElementColor(clr);    }        return true;    case QVariant::Size: {        DomSize *sz = new DomSize();        const QSize size = v.toSize();        sz->setElementWidth(size.width());        sz->setElementHeight(size.height());        dom_prop->setElementSize(sz);    }        return true;    case QVariant::SizeF: {        DomSizeF *szf = new DomSizeF();        const QSizeF sizef = v.toSizeF();        szf->setElementWidth(sizef.width());        szf->setElementHeight(sizef.height());        dom_prop->setElementSizeF(szf);    }        return true;    case QVariant::Rect: {        DomRect *rc = new DomRect();        const QRect rect = v.toRect();        rc->setElementX(rect.x());        rc->setElementY(rect.y());        rc->setElementWidth(rect.width());        rc->setElementHeight(rect.height());        dom_prop->setElementRect(rc);    }        return true;    case QVariant::RectF: {        DomRectF *rcf = new DomRectF();        const QRectF rectf = v.toRectF();        rcf->setElementX(rectf.x());        rcf->setElementY(rectf.y());        rcf->setElementWidth(rectf.width());        rcf->setElementHeight(rectf.height());        dom_prop->setElementRectF(rcf);    }        return true;    case QVariant::Font: {        DomFont *fnt = new DomFont();        const QFont font = qvariant_cast<QFont>(v);        const uint mask = font.resolve();        if (mask & QFontPrivate::Weight) {            fnt->setElementBold(font.bold());            fnt->setElementWeight(font.weight());        }        if (mask & QFontPrivate::Family)            fnt->setElementFamily(font.family());        if (mask & QFontPrivate::Style)            fnt->setElementItalic(font.italic());        if (mask & QFontPrivate::Size)            fnt->setElementPointSize(font.pointSize());        if (mask & QFontPrivate::StrikeOut)            fnt->setElementStrikeOut(font.strikeOut());        if (mask & QFontPrivate::Underline)            fnt->setElementUnderline(font.underline());        if (mask & QFontPrivate::Kerning)            fnt->setElementKerning(font.kerning());        if (mask & QFontPrivate::StyleStrategy) {            const QMetaEnum styleStrategy_enum = metaEnum<QAbstractFormBuilderGadget>("styleStrategy");            fnt->setElementStyleStrategy(QLatin1String(styleStrategy_enum.valueToKey(font.styleStrategy())));        }        dom_prop->setElementFont(fnt);    }        return true;    case QVariant::Cursor: {        const QMetaEnum cursorShape_enum = metaEnum<QAbstractFormBuilderGadget>("cursorShape");        dom_prop->setElementCursorShape(QLatin1String(cursorShape_enum.valueToKey(qvariant_cast<QCursor>(v).shape())));        }        return true;    case QVariant::KeySequence: {        DomString *s = new DomString();        s->setText(qvariant_cast<QKeySequence>(v).toString(QKeySequence::PortableText));        dom_prop->setElementString(s);        }        return true;    case QVariant::Locale: {        DomLocale *dom = new DomLocale();        const QLocale locale = qvariant_cast<QLocale>(v);        const QMetaEnum language_enum = metaEnum<QAbstractFormBuilderGadget>("language");        const QMetaEnum country_enum = metaEnum<QAbstractFormBuilderGadget>("country");        dom->setAttributeLanguage(QLatin1String(language_enum.valueToKey(locale.language())));        dom->setAttributeCountry(QLatin1String(country_enum.valueToKey(locale.country())));        dom_prop->setElementLocale(dom);        }        return true;    case QVariant::SizePolicy: {        DomSizePolicy *dom = new DomSizePolicy();        const QSizePolicy sizePolicy = qvariant_cast<QSizePolicy>(v);        dom->setElementHorStretch(sizePolicy.horizontalStretch());        dom->setElementVerStretch(sizePolicy.verticalStretch());        const QMetaEnum sizeType_enum = metaEnum<QAbstractFormBuilderGadget>("sizeType");        dom->setAttributeHSizeType(QLatin1String(sizeType_enum.valueToKey(sizePolicy.horizontalPolicy())));        dom->setAttributeVSizeType(QLatin1String(sizeType_enum.valueToKey(sizePolicy.verticalPolicy())));        dom_prop->setElementSizePolicy(dom);    }        return true;    case QVariant::Date: {        DomDate *dom = new DomDate();        const QDate date = qvariant_cast<QDate>(v);        dom->setElementYear(date.year());        dom->setElementMonth(date.month());        dom->setElementDay(date.day());        dom_prop->setElementDate(dom);        }        return true;    case QVariant::Time: {        DomTime *dom = new DomTime();        const QTime time = qvariant_cast<QTime>(v);        dom->setElementHour(time.hour());        dom->setElementMinute(time.minute());        dom->setElementSecond(time.second());        dom_prop->setElementTime(dom);        }        return true;    case QVariant::DateTime: {        DomDateTime *dom = new DomDateTime();        const QDateTime dateTime = qvariant_cast<QDateTime>(v);        dom->setElementHour(dateTime.time().hour());        dom->setElementMinute(dateTime.time().minute());        dom->setElementSecond(dateTime.time().second());        dom->setElementYear(dateTime.date().year());        dom->setElementMonth(dateTime.date().month());        dom->setElementDay(dateTime.date().day());        dom_prop->setElementDateTime(dom);    }        return true;    case QVariant::Url: {        DomUrl *dom = new DomUrl();        const QUrl url = v.toUrl();        DomString *str = new DomString();        str->setText(url.toString());        dom->setElementString(str);        dom_prop->setElementUrl(dom);    }        return true;    case QVariant::StringList: {        DomStringList *sl = new DomStringList;        sl->setElementString(qvariant_cast<QStringList>(v));        dom_prop->setElementStringList(sl);    }        return true;    default:        break;    }    return false;}static QString msgCannotWriteProperty(const QString &pname, const QVariant &v){    return QObject::tr("The property %1 could not be written. The type %2 is not supported yet.").                       arg(pname).arg(QVariant::typeToName (v.type()));}// Convert simple variant types to DOM propertiesDomProperty *variantToDomProperty(const QString &pname, const QVariant &v, bool translateString){    DomProperty *dom_prop = new DomProperty();    dom_prop->setAttributeName(pname);    if (applySimpleProperty(v, translateString, dom_prop))        return dom_prop;    delete dom_prop;    uiLibWarning(msgCannotWriteProperty(pname, v));    return 0;}// Convert complex variant types to DOM properties with the help of  QAbstractFormBuilder// Does not perform a check using  QAbstractFormBuilder::checkProperty().DomProperty *variantToDomProperty(QAbstractFormBuilder *afb, QObject *obj,                                  const QString &pname, const QVariant &v){    DomProperty *dom_prop = new DomProperty();    dom_prop->setAttributeName(pname);    const QMetaObject *meta = obj->metaObject();    const int pindex = meta->indexOfProperty(pname.toLatin1());    if (pindex != -1) {        QMetaProperty meta_property = meta->property(pindex);        if (!meta_property.hasStdCppSet() || (qobject_cast<QAbstractScrollArea *>(obj) && pname == QLatin1String("cursor")))            dom_prop->setAttributeStdset(0);    }    // Try simple properties    const bool translateString = pname != QLatin1String("objectName");    if (applySimpleProperty(v, translateString, 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::Pixmap:        afb->setPixmapProperty(*dom_prop, afb->pixmapPaths(qvariant_cast<QPixmap>(v)));        dom_prop->setAttributeName(pname);        break;    case QVariant::Icon:        afb->setIconProperty(*dom_prop, afb->iconPaths(qvariant_cast<QIcon>(v)));        dom_prop->setAttributeName(pname);        break;    default:        delete dom_prop;        uiLibWarning(msgCannotWriteProperty(pname, v));        return 0;    }    return dom_prop;}#ifdef QFORMINTERNAL_NAMESPACE}#endif

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?