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 + -
显示快捷键?