📄 abstractformbuilder.cpp
字号:
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 { children = widget->children(); } if (qobject_cast<QMainWindow *>(widget) && widget->parent() && widget->parent()->metaObject()->className() == QLatin1String("qdesigner_internal::QDesignerPromotedWidget")) { // add actions of parent promoted widget QObjectList list = widget->parent()->children(); QListIterator<QObject *> it(list); while (it.hasNext()) { QObject *obj = it.next(); if (qobject_cast<QAction *>(obj) || qobject_cast<QActionGroup *>(obj)) children.append(obj); } } 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; for (int idx=0; layout->itemAt(idx); ++idx) { QLayoutItem *item = layout->itemAt(idx); DomLayoutItem *ui_item = createDom(item, lay, ui_parentWidget); if (ui_item) ui_items.append(ui_item); } lay->setElementItem(ui_items); return lay;}/*! \internal*/DomLayoutItem *QAbstractFormBuilder::createDom(QLayoutItem *item, DomLayout *ui_layout, DomWidget *ui_parentWidget){ DomLayoutItem *ui_item = new DomLayoutItem(); if (item->widget()) { ui_item->setElementWidget(createDom(item->widget(), ui_parentWidget)); m_laidout.insert(item->widget(), true); } else if (item->layout()) { ui_item->setElementLayout(createDom(item->layout(), ui_layout, ui_parentWidget)); } else if (item->spacerItem()) { ui_item->setElementSpacer(createDom(item->spacerItem(), ui_layout, ui_parentWidget)); } return ui_item;}/*! \internal*/DomSpacer *QAbstractFormBuilder::createDom(QSpacerItem *spacer, DomLayout *ui_layout, DomWidget *ui_parentWidget){ Q_UNUSED(ui_layout); Q_UNUSED(ui_parentWidget); DomSpacer *ui_spacer = new DomSpacer(); QList<DomProperty*> properties; DomProperty *prop = 0; // sizeHint property prop = new DomProperty(); prop->setAttributeName(QLatin1String("sizeHint")); prop->setElementSize(new DomSize()); prop->elementSize()->setElementWidth(spacer->sizeHint().width()); prop->elementSize()->setElementHeight(spacer->sizeHint().height()); properties.append(prop); // orientation property prop = new DomProperty(); // ### we don't implemented the case where expandingDirections() is both Vertical and Horizontal prop->setAttributeName(QLatin1String("orientation")); prop->setElementEnum((spacer->expandingDirections() & Qt::Horizontal) ? QLatin1String("Qt::Horizontal") : QLatin1String("Qt::Vertical")); properties.append(prop); ui_spacer->setElementProperty(properties); return ui_spacer;}/*! \internal*/DomProperty *QAbstractFormBuilder::createProperty(QObject *obj, const QString &pname, const QVariant &v){ if (!checkProperty(obj, pname)) { return 0; } DomProperty *dom_prop = new DomProperty(); const QMetaObject *meta = obj->metaObject(); int pindex = meta->indexOfProperty(pname.toLatin1()); if (pindex != -1) { QMetaProperty meta_property = meta->property(pindex); if (!meta_property.hasStdCppSet()) dom_prop->setAttributeStdset(0); } switch (v.type()) { case QVariant::String: { DomString *str = new DomString(); str->setText(v.toString()); if (pname == QLatin1String("objectName")) str->setAttributeNotr(QLatin1String("true")); dom_prop->setElementString(str); } break; case QVariant::ByteArray: { dom_prop->setElementCstring(QString::fromUtf8(v.toByteArray())); } break; case QVariant::Int: { dom_prop->setElementNumber(v.toInt()); } break; case QVariant::UInt: { dom_prop->setElementNumber(v.toUInt()); } break; case QVariant::LongLong: { dom_prop->setElementLongLong(v.toLongLong()); } break; case QVariant::ULongLong: { dom_prop->setElementLongLong(v.toULongLong()); } break; case QVariant::Double: { dom_prop->setElementDouble(v.toDouble()); } break; case QVariant::Bool: { dom_prop->setElementBool(v.toBool() ? QLatin1String("true") : QLatin1String("false")); } break; case QVariant::Char: { DomChar *ch = new DomChar(); QChar character = v.toChar(); ch->setElementUnicode(character.unicode()); dom_prop->setElementChar(ch); } break; case QVariant::Point: { DomPoint *pt = new DomPoint(); QPoint point = v.toPoint(); pt->setElementX(point.x()); pt->setElementY(point.y()); dom_prop->setElementPoint(pt); } break; case QVariant::PointF: { DomPointF *ptf = new DomPointF(); QPointF pointf = v.toPointF(); ptf->setElementX(pointf.x()); ptf->setElementY(pointf.y()); dom_prop->setElementPointF(ptf); } break; case QVariant::Color: { DomColor *clr = new DomColor(); QColor color = qvariant_cast<QColor>(v); clr->setElementRed(color.red()); clr->setElementGreen(color.green()); clr->setElementBlue(color.blue()); dom_prop->setElementColor(clr); } break; case QVariant::Size: { DomSize *sz = new DomSize(); QSize size = v.toSize(); sz->setElementWidth(size.width()); sz->setElementHeight(size.height()); dom_prop->setElementSize(sz); } break; case QVariant::SizeF: { DomSizeF *szf = new DomSizeF(); QSizeF sizef = v.toSizeF(); szf->setElementWidth(sizef.width()); szf->setElementHeight(sizef.height()); dom_prop->setElementSizeF(szf); } break; case QVariant::Rect: { DomRect *rc = new DomRect(); QRect rect = v.toRect(); rc->setElementX(rect.x()); rc->setElementY(rect.y()); rc->setElementWidth(rect.width()); rc->setElementHeight(rect.height()); dom_prop->setElementRect(rc); } break; case QVariant::RectF: { DomRectF *rcf = new DomRectF(); QRectF rectf = v.toRectF(); rcf->setElementX(rectf.x()); rcf->setElementY(rectf.y()); rcf->setElementWidth(rectf.width()); rcf->setElementHeight(rectf.height()); dom_prop->setElementRectF(rcf); } break; case QVariant::Font: { DomFont *fnt = new DomFont(); QFont font = qvariant_cast<QFont>(v); 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) fnt->setElementAntialiasing(font.styleStrategy() == QFont::PreferDefault); dom_prop->setElementFont(fnt); } break; case QVariant::Cursor: { dom_prop->setElementCursor(qvariant_cast<QCursor>(v).shape()); } break; case QVariant::KeySequence: { DomString *s = new DomString(); s->setText(qvariant_cast<QKeySequence>(v).toString(QKeySequence::PortableText)); dom_prop->setElementString(s); } break; case QVariant::Palette: { DomPalette *dom = new DomPalette(); QPalette palette = qvariant_cast<QPalette>(v); palette.setCurrentColorGroup(QPalette::Active); dom->setElementActive(saveColorGroup(palette)); palette.setCurrentColorGroup(QPalette::Inactive); dom->setElementInactive(saveColorGroup(palette)); palette.setCurrentColorGroup(QPalette::Disabled); dom->setElementDisabled(saveColorGroup(palette)); dom_prop->setElementPalette(dom); } break; case QVariant::SizePolicy: { DomSizePolicy *dom = new DomSizePolicy(); QSizePolicy sizePolicy = qvariant_cast<QSizePolicy>(v); dom->setElementHorStretch(sizePolicy.horizontalStretch()); dom->setElementVerStretch(sizePolicy.verticalStretch()); dom->setElementHSizeType(sizePolicy.horizontalPolicy()); dom->setElementVSizeType(sizePolicy.verticalPolicy()); dom_prop->setElementSizePolicy(dom); } break;
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -