abstractformbuilder.cpp

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

CPP
2,006
字号
        QGradient *gr = 0;        if (type == QGradient::LinearGradient) {            gr = new QLinearGradient(QPointF(gradient->attributeStartX(), gradient->attributeStartY()),                            QPointF(gradient->attributeEndX(), gradient->attributeEndY()));        } else if (type == QGradient::RadialGradient) {            gr = new QRadialGradient(QPointF(gradient->attributeCentralX(), gradient->attributeCentralY()),                            gradient->attributeRadius(),                            QPointF(gradient->attributeFocalX(), gradient->attributeFocalY()));        } else if (type == QGradient::ConicalGradient) {            gr = new QConicalGradient(QPointF(gradient->attributeCentralX(), gradient->attributeCentralY()),                            gradient->attributeAngle());        }        if (!gr)            return br;        const QGradient::Spread spread = enumKeyToValue<QGradient::Spread>(gradientSpread_enum, gradient->attributeSpread().toLatin1());        gr->setSpread(spread);        const QGradient::CoordinateMode coord = enumKeyToValue<QGradient::CoordinateMode>(gradientCoordinate_enum, gradient->attributeCoordinateMode().toLatin1());        gr->setCoordinateMode(coord);        const QList<DomGradientStop *> stops = gradient->elementGradientStop();        QListIterator<DomGradientStop *> it(stops);        while (it.hasNext()) {            const DomGradientStop *stop = it.next();            const DomColor *color = stop->elementColor();            gr->setColorAt(stop->attributePosition(), QColor::fromRgb(color->elementRed(),                            color->elementGreen(), color->elementBlue(), color->attributeAlpha()));        }        br = QBrush(*gr);        delete gr;    } else if (style == Qt::TexturePattern) {        const DomProperty *texture = brush->elementTexture();        if (texture && texture->kind() == DomProperty::Pixmap) {            br.setTexture(domPropertyToPixmap(texture));        }    } else {        const DomColor *color = brush->elementColor();        br.setColor(QColor::fromRgb(color->elementRed(),                            color->elementGreen(), color->elementBlue(), color->attributeAlpha()));        br.setStyle((Qt::BrushStyle)style);    }    return br;}/*!    \internal*/DomBrush *QAbstractFormBuilder::saveBrush(const QBrush &br){    const QMetaEnum brushStyle_enum = metaEnum<QAbstractFormBuilderGadget>("brushStyle");    DomBrush *brush = new DomBrush();    const Qt::BrushStyle style = br.style();    brush->setAttributeBrushStyle(QLatin1String(brushStyle_enum.valueToKey(style)));    if (style == Qt::LinearGradientPattern ||                style == Qt::RadialGradientPattern ||                style == Qt::ConicalGradientPattern) {        const QMetaEnum gradientType_enum = metaEnum<QAbstractFormBuilderGadget>("gradientType");        const QMetaEnum gradientSpread_enum = metaEnum<QAbstractFormBuilderGadget>("gradientSpread");        const QMetaEnum gradientCoordinate_enum = metaEnum<QAbstractFormBuilderGadget>("gradientCoordinate");        DomGradient *gradient = new DomGradient();        const QGradient *gr = br.gradient();        const QGradient::Type type = gr->type();        gradient->setAttributeType(QLatin1String(gradientType_enum.valueToKey(type)));        gradient->setAttributeSpread(QLatin1String(gradientSpread_enum.valueToKey(gr->spread())));        gradient->setAttributeCoordinateMode(QLatin1String(gradientCoordinate_enum.valueToKey(gr->coordinateMode())));        QList<DomGradientStop *> stops;        QGradientStops st = gr->stops();        QVectorIterator<QPair<qreal, QColor> > it(st);        while (it.hasNext()) {            const QPair<qreal, QColor> pair = it.next();            DomGradientStop *stop = new DomGradientStop();            stop->setAttributePosition(pair.first);            DomColor *color = new DomColor();            color->setElementRed(pair.second.red());            color->setElementGreen(pair.second.green());            color->setElementBlue(pair.second.blue());            color->setAttributeAlpha(pair.second.alpha());            stop->setElementColor(color);            stops.append(stop);        }        gradient->setElementGradientStop(stops);        if (type == QGradient::LinearGradient) {            QLinearGradient *lgr = (QLinearGradient *)(gr);            gradient->setAttributeStartX(lgr->start().x());            gradient->setAttributeStartY(lgr->start().y());            gradient->setAttributeEndX(lgr->finalStop().x());            gradient->setAttributeEndY(lgr->finalStop().y());        } else if (type == QGradient::RadialGradient) {            QRadialGradient *rgr = (QRadialGradient *)(gr);            gradient->setAttributeCentralX(rgr->center().x());            gradient->setAttributeCentralY(rgr->center().y());            gradient->setAttributeFocalX(rgr->focalPoint().x());            gradient->setAttributeFocalY(rgr->focalPoint().y());            gradient->setAttributeRadius(rgr->radius());        } else if (type == QGradient::ConicalGradient) {            QConicalGradient *cgr = (QConicalGradient *)(gr);            gradient->setAttributeCentralX(cgr->center().x());            gradient->setAttributeCentralY(cgr->center().y());            gradient->setAttributeAngle(cgr->angle());        }        brush->setElementGradient(gradient);    } else if (style == Qt::TexturePattern) {        const QPixmap pixmap = br.texture();        if (!pixmap.isNull()) {            DomProperty *p = new DomProperty;            setPixmapProperty(*p,  pixmapPaths(pixmap));            brush->setElementTexture(p);        }    } else {        QColor c = br.color();        DomColor *color = new DomColor();        color->setElementRed(c.red());        color->setElementGreen(c.green());        color->setElementBlue(c.blue());        color->setAttributeAlpha(c.alpha());        brush->setElementColor(color);    }    return brush;}/*!    \internal*/QWidget *QAbstractFormBuilder::createWidget(const QString &widgetName, QWidget *parentWidget, const QString &name){    Q_UNUSED(widgetName);    Q_UNUSED(parentWidget);    Q_UNUSED(name);    return 0;}/*!    \internal*/QLayout *QAbstractFormBuilder::createLayout(const QString &layoutName, QObject *parent, const QString &name){    Q_UNUSED(layoutName);    Q_UNUSED(parent);    Q_UNUSED(name);    return 0;}/*!    \internal*/QAction *QAbstractFormBuilder::createAction(QObject *parent, const QString &name){    QAction *action = new QAction(parent);    action->setObjectName(name);    m_actions.insert(name, action);    return action;}/*!    \internal*/QActionGroup *QAbstractFormBuilder::createActionGroup(QObject *parent, const QString &name){    QActionGroup *g = new QActionGroup(parent);    g->setObjectName(name);    m_actionGroups.insert(name, g);    return g;}/*!    \fn void QAbstractFormBuilder::save(QIODevice *device, QWidget *widget)    Saves an XML representation of the given \a widget to the    specified \a device in the standard \c{.ui} file format.    \sa load()*/void QAbstractFormBuilder::save(QIODevice *dev, QWidget *widget){    DomWidget *ui_widget = createDom(widget, 0);    Q_ASSERT( ui_widget != 0 );    DomUI *ui = new DomUI();    ui->setAttributeVersion(QLatin1String("4.0"));    ui->setElementWidget(ui_widget);    saveDom(ui, widget);    QDomDocument doc;    doc.appendChild(ui->write(doc));    QByteArray bytes = doc.toString().toUtf8();    dev->write(bytes, bytes.size());    m_laidout.clear();    delete ui;}/*!    \internal*/void QAbstractFormBuilder::saveDom(DomUI *ui, QWidget *widget){    ui->setElementClass(widget->objectName());    if (DomConnections *ui_connections = saveConnections()) {        ui->setElementConnections(ui_connections);    }    if (DomCustomWidgets *ui_customWidgets = saveCustomWidgets()) {        ui->setElementCustomWidgets(ui_customWidgets);    }    if (DomTabStops *ui_tabStops = saveTabStops()) {        ui->setElementTabStops(ui_tabStops);    }    if (DomResources *ui_resources = saveResources()) {        ui->setElementResources(ui_resources);    }}/*!    \internal*/DomConnections *QAbstractFormBuilder::saveConnections(){    return new DomConnections;}/*!    \internal*/DomWidget *QAbstractFormBuilder::createDom(QWidget *widget, DomWidget *ui_parentWidget, bool recursive){    DomWidget *ui_widget = new DomWidget();    ui_widget->setAttributeClass(QLatin1String(widget->metaObject()->className()));    ui_widget->setElementProperty(computeProperties(widget));    if (recursive) {        if (QLayout *layout = widget->layout()) {            if (DomLayout *ui_layout = createDom(layout, 0, ui_parentWidget)) {                QList<DomLayout*> ui_layouts;                ui_layouts.append(ui_layout);                ui_widget->setElementLayout(ui_layouts);            }        }    }    // widgets, actions and action groups    QList<DomWidget*> ui_widgets;    QList<DomAction*> ui_actions;    QList<DomActionGroup*> ui_action_groups;    QList<QObject*> children;    // splitters need to store their children in the order specified by child indexes,    // not the order of the child list.    if (QSplitter *splitter = qobject_cast<QSplitter*>(widget)) {        for (int i = 0; i < splitter->count(); ++i)            children.append(splitter->widget(i));    } else {        QList<QObject *> childObjects = widget->children();        QList<QWidget *> list = qVariantValue<QWidgetList>(widget->property("_q_widgetOrder"));        foreach (QWidget *w, list) {            if (childObjects.contains(w)) {                children.append(w);                childObjects.removeAll(w);            }        }        children += childObjects;    }    foreach (QObject *obj, children) {        if (QWidget *childWidget = qobject_cast<QWidget*>(obj)) {            if (m_laidout.contains(childWidget) || recursive == false)                continue;            if (QMenu *menu = qobject_cast<QMenu *>(childWidget)) {                QList<QAction *> actions = menu->parentWidget()->actions();                QListIterator<QAction *> it(actions);                bool found = false;                while (it.hasNext()) {                    if (it.next()->menu() == menu)                        found = true;                }                if (!found)                    continue;            }            if (DomWidget *ui_child = createDom(childWidget, ui_widget)) {                ui_widgets.append(ui_child);            }        } else if (QAction *childAction = qobject_cast<QAction*>(obj)) {            if (childAction->actionGroup() != 0) {                // it will be added later.                continue;            }            if (DomAction *ui_action = createDom(childAction)) {                ui_actions.append(ui_action);            }        } else if (QActionGroup *childActionGroup = qobject_cast<QActionGroup*>(obj)) {            if (DomActionGroup *ui_action_group = createDom(childActionGroup)) {                ui_action_groups.append(ui_action_group);            }        }    }    // add-action    QList<DomActionRef*> ui_action_refs;    foreach (QAction *action, widget->actions()) {        if (DomActionRef *ui_action_ref = createActionRefDom(action)) {            ui_action_refs.append(ui_action_ref);        }    }    if (recursive)        ui_widget->setElementWidget(ui_widgets);    ui_widget->setElementAction(ui_actions);    ui_widget->setElementActionGroup(ui_action_groups);    ui_widget->setElementAddAction(ui_action_refs);    saveExtraInfo(widget, ui_widget, ui_parentWidget);    return ui_widget;}/*!    \internal*/DomActionRef *QAbstractFormBuilder::createActionRefDom(QAction *action){    QString name = action->objectName();    if (action->menu() != 0)        name = action->menu()->objectName();    DomActionRef *ui_action_ref = new DomActionRef();    if (action->isSeparator())        ui_action_ref->setAttributeName(QLatin1String("separator"));    else        ui_action_ref->setAttributeName(name);    return ui_action_ref;}/*!    \internal*/DomLayout *QAbstractFormBuilder::createDom(QLayout *layout, DomLayout *ui_layout, DomWidget *ui_parentWidget){    Q_UNUSED(ui_layout)    DomLayout *lay = new DomLayout();    lay->setAttributeClass(QLatin1String(layout->metaObject()->className()));    lay->setElementProperty(computeProperties(layout));    QList<DomLayoutItem*> ui_items;    QMap<QObject *, QLayoutItem *> objectToItem;    QList<QLayoutItem *> spacerItems;    QList<QLayoutItem *> newList;    for (int idx=0; layout->itemAt(idx); ++idx) {        QLayoutItem *item = layout->itemAt(idx);        if (item->widget())            objectToItem[item->widget()] = item;        else if (item->layout())            objectToItem[item->layout()] = item;        else if (item->spacerItem())            spacerItems.append(item);        newList.append(item);    }    if (qobject_cast<QGridLayout *>(layout)) {        newList.clear();        QList<QObject *> childrenList = layout->parentWidget()->children();        foreach (QObject *o, childrenList) {            if (objectToItem.contains(o))                newList.append(objectToItem[o]);        }        newList += spacerItems;    }    foreach (QLayoutItem *item, newList) {        DomLayoutItem *ui_item = createDom(item, lay, ui_parentWidget);        if (ui_item)            ui_items.append(ui_item);    }    lay->setElementItem(ui_items);    return lay;}

⌨️ 快捷键说明

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