📄 abstractformbuilder.cpp
字号:
f.setItalic(font->elementItalic()); f.setBold(font->elementBold()); f.setUnderline(font->elementUnderline()); f.setStrikeOut(font->elementStrikeOut()); v = qVariantFromValue(f); } break; case DomProperty::Date: { DomDate *date = p->elementDate(); QDate d(date->elementYear(), date->elementMonth(), date->elementDay()); v = QVariant(d); } break; case DomProperty::Time: { DomTime *t = p->elementTime(); QTime tm(t->elementHour(), t->elementMinute(), t->elementSecond()); v = QVariant(tm); } break; case DomProperty::DateTime: { DomDateTime *dateTime = p->elementDateTime(); QDate d(dateTime->elementYear(), dateTime->elementMonth(), dateTime->elementDay()); QTime tm(dateTime->elementHour(), dateTime->elementMinute(), dateTime->elementSecond()); QDateTime dt(d, tm); v = QVariant(dt); } break; case DomProperty::Pixmap: case DomProperty::IconSet: { DomResourcePixmap *resource = 0; if (p->kind() == DomProperty::IconSet) resource = p->elementIconSet(); else resource = p->elementPixmap(); if (resource != 0) { QString icon_path = resource->text(); QString qrc_path = resource->attributeResource(); if (icon_path.isEmpty()) { if (p->kind() == DomProperty::IconSet) return QIcon(); return QPixmap(); } if (qrc_path.isEmpty()) icon_path = workingDirectory().absoluteFilePath(icon_path); else qrc_path = workingDirectory().absoluteFilePath(qrc_path); if (p->kind() == DomProperty::IconSet) { QIcon icon = nameToIcon(icon_path, qrc_path); v = qVariantFromValue(icon); } else { QPixmap pixmap = nameToPixmap(icon_path, qrc_path); v = qVariantFromValue(pixmap); } } } break; case DomProperty::Palette: { DomPalette *dom = p->elementPalette(); QPalette palette; if (dom->elementActive()) setupColorGroup(palette, QPalette::Active, dom->elementActive()); if (dom->elementInactive()) setupColorGroup(palette, QPalette::Inactive, dom->elementInactive()); if (dom->elementDisabled()) setupColorGroup(palette, QPalette::Disabled, dom->elementDisabled()); palette.setCurrentColorGroup(QPalette::Active); v = qVariantFromValue(palette); } break; case DomProperty::Cursor: { v = qVariantFromValue(QCursor(static_cast<Qt::CursorShape>(p->elementCursor()))); } break; case DomProperty::Set: { QByteArray pname = p->attributeName().toUtf8(); int index = meta->indexOfProperty(pname); if (index == -1) { qWarning() << "property" << pname << "is not supported"; break; } QMetaEnum e = meta->property(index).enumerator(); Q_ASSERT(e.isFlag() == true); v = e.keysToValue(p->elementSet().toUtf8()); } break; case DomProperty::Enum: { QByteArray pname = p->attributeName().toUtf8(); int index = meta->indexOfProperty(pname); if (index == -1) { // ### special-casing for Line (QFrame) -- fix for 4.2 if (!qstrcmp(meta->className(), "QFrame") && (pname == QLatin1String("orientation"))) { v = (p->elementEnum() == QLatin1String("Qt::Horizontal")) ? QFrame::HLine : QFrame::VLine; } else { qWarning() << "property" << pname << "is not supported"; } break; } QMetaEnum e = meta->property(index).enumerator(); v = e.keyToValue(p->elementEnum().toUtf8()); } break; case DomProperty::SizePolicy: { DomSizePolicy *sizep = p->elementSizePolicy(); QSizePolicy sizePolicy; sizePolicy.setHorizontalStretch(sizep->elementHorStretch()); sizePolicy.setVerticalStretch(sizep->elementVerStretch()); sizePolicy.setHorizontalPolicy((QSizePolicy::Policy) sizep->elementHSizeType()); sizePolicy.setVerticalPolicy((QSizePolicy::Policy) sizep->elementVSizeType()); v = qVariantFromValue(sizePolicy); } break; default: qWarning() << "QAbstractFormBuilder::toVariant:" << p->kind() << " not implemented yet!"; break; } return v;}/*! \internal*/void QAbstractFormBuilder::setupColorGroup(QPalette &palette, QPalette::ColorGroup colorGroup, DomColorGroup *group){ QList<DomColor*> colors = group->elementColor(); for (int role = 0; role < colors.size(); ++role) { DomColor *color = colors.at(role); QColor c(color->elementRed(), color->elementGreen(), color->elementBlue()); palette.setColor(colorGroup, QPalette::ColorRole(role), c); // ### TODO: support the QPalette::ColorRole as string }}/*! \internal*/DomColorGroup *QAbstractFormBuilder::saveColorGroup(const QPalette &palette){ DomColorGroup *group = new DomColorGroup(); QList<DomColor*> colors; for (int role = QPalette::Foreground; role < QPalette::NColorRoles; ++role) { QColor c = palette.color(QPalette::ColorRole(role)); DomColor *color = new DomColor(); color->setElementRed(c.red()); color->setElementGreen(c.green()); color->setElementBlue(c.blue()); colors.append(color); } group->setElementColor(colors); return group;}/*! \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 { children = widget->children(); } foreach (QObject *obj, children) { if (QWidget *childWidget = qobject_cast<QWidget*>(obj)) { if (m_laidout.contains(childWidget) || recursive == false) 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();
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -