📄 abstractformbuilder.cpp
字号:
return true; } else if (QToolBox *toolBox = qobject_cast<QToolBox*>(parentWidget)) { int tabIndex = toolBox->count(); toolBox->addItem(widget, label); if (DomProperty *picon = attributes.value(QLatin1String("icon"))) { toolBox->setItemIcon(tabIndex, qvariant_cast<QIcon>(toVariant(0, picon))); } if (DomProperty *ptoolTip = attributes.value(QLatin1String("toolTip"))) { toolBox->setItemToolTip(tabIndex, toString(ptoolTip->elementString())); } return true; } else if (QStackedWidget *stackedWidget = qobject_cast<QStackedWidget*>(parentWidget)) { stackedWidget->addWidget(widget); return true; } else if (QSplitter *splitter = qobject_cast<QSplitter*>(parentWidget)) { splitter->addWidget(widget); return true; } else if (QDockWidget *dockWidget = qobject_cast<QDockWidget*>(parentWidget)) { dockWidget->setWidget(widget); return true; } return false;}/*! \internal*/void QAbstractFormBuilder::layoutInfo(DomLayout *ui_layout, QObject *parent, int *margin, int *spacing){ QHash<QString, DomProperty*> properties = propertyMap(ui_layout->elementProperty()); if (margin) *margin = properties.contains(QLatin1String("margin")) ? properties.value(QLatin1String("margin"))->elementNumber() : m_defaultMargin; if (spacing) *spacing = properties.contains(QLatin1String("spacing")) ? properties.value(QLatin1String("spacing"))->elementNumber() : m_defaultSpacing; if (margin && m_defaultMargin == INT_MIN) { Q_ASSERT(parent); if (qstrcmp(parent->metaObject()->className(), "QLayoutWidget") == 0) *margin = INT_MIN; }}/*! \internal*/QLayout *QAbstractFormBuilder::create(DomLayout *ui_layout, QLayout *parentLayout, QWidget *parentWidget){ QObject *p = parentLayout; if (p == 0) p = parentWidget; Q_ASSERT(p != 0); bool tracking = false; if (p == parentWidget && parentWidget->layout()) { tracking = true; p = parentWidget->layout(); } QLayout *layout = createLayout(ui_layout->attributeClass(), p, QString()); if (layout == 0) return 0; if (tracking && layout->parent() == 0) { QBoxLayout *box = qobject_cast<QBoxLayout*>(parentWidget->layout()); Q_ASSERT(box != 0); // only QBoxLayout is supported box->addLayout(layout); } int margin = INT_MIN, spacing = INT_MIN; layoutInfo(ui_layout, p, &margin, &spacing); if (margin != INT_MIN) layout->setMargin(margin); if (spacing != INT_MIN) layout->setSpacing(spacing); applyProperties(layout, ui_layout->elementProperty()); foreach (DomLayoutItem *ui_item, ui_layout->elementItem()) { if (QLayoutItem *item = create(ui_item, layout, parentWidget)) { addItem(ui_item, item, layout); } } return layout;}/*! \internal*/bool QAbstractFormBuilder::addItem(DomLayoutItem *ui_item, QLayoutItem *item, QLayout *layout){ if (item->widget()) { static_cast<QFriendlyLayout*>(layout)->addChildWidget(item->widget()); } else if (item->layout()) { static_cast<QFriendlyLayout*>(layout)->addChildLayout(item->layout()); } else if (item->spacerItem()) { // nothing to do } else { return false; } if (QGridLayout *grid = qobject_cast<QGridLayout*>(layout)) { int rowSpan = ui_item->hasAttributeRowSpan() ? ui_item->attributeRowSpan() : 1; int colSpan = ui_item->hasAttributeColSpan() ? ui_item->attributeColSpan() : 1; grid->addItem(item, ui_item->attributeRow(), ui_item->attributeColumn(), rowSpan, colSpan, item->alignment()); } else { layout->addItem(item); } return true;}/*! \internal*/QLayoutItem *QAbstractFormBuilder::create(DomLayoutItem *ui_layoutItem, QLayout *layout, QWidget *parentWidget){ switch (ui_layoutItem->kind()) { case DomLayoutItem::Widget: return new QWidgetItem(create(ui_layoutItem->elementWidget(), parentWidget)); case DomLayoutItem::Spacer: { QSize size(0, 0); QSizePolicy::Policy sizeType = QSizePolicy::Expanding; bool isVspacer = false; DomSpacer *ui_spacer = ui_layoutItem->elementSpacer(); int e_index = QAbstractFormBuilderGadget::staticMetaObject.indexOfProperty("sizeType"); Q_ASSERT(e_index != -1); QMetaEnum sizePolicy_enum = QAbstractFormBuilderGadget::staticMetaObject.property(e_index).enumerator(); e_index = QAbstractFormBuilderGadget::staticMetaObject.indexOfProperty("orientation"); Q_ASSERT(e_index != -1); QMetaEnum orientation_enum = QAbstractFormBuilderGadget::staticMetaObject.property(e_index).enumerator(); foreach (DomProperty *p, ui_spacer->elementProperty()) { QVariant v = toVariant(&QAbstractFormBuilderGadget::staticMetaObject, p); // ### remove me if (v.isNull()) continue; if (p->attributeName() == QLatin1String("sizeHint") && p->kind() == DomProperty::Size) { size = v.toSize(); // ### remove me } else if (p->attributeName() == QLatin1String("sizeType") && p->kind() == DomProperty::Enum) { sizeType = static_cast<QSizePolicy::Policy>(sizePolicy_enum.keyToValue(p->elementEnum().toUtf8())); } else if (p->attributeName() == QLatin1String("orientation") && p->kind() == DomProperty::Enum) { Qt::Orientation o = static_cast<Qt::Orientation>(orientation_enum.keyToValue(p->elementEnum().toUtf8())); isVspacer = (o == Qt::Vertical); } } QSpacerItem *spacer = 0; if (isVspacer) spacer = new QSpacerItem(size.width(), size.height(), QSizePolicy::Minimum, sizeType); else spacer = new QSpacerItem(size.width(), size.height(), sizeType, QSizePolicy::Minimum); return spacer; } case DomLayoutItem::Layout: return create(ui_layoutItem->elementLayout(), layout, parentWidget); default: break; } return 0;}/*! \internal*/void QAbstractFormBuilder::applyProperties(QObject *o, const QList<DomProperty*> &properties){ foreach (DomProperty *p, properties) { QVariant v = toVariant(o->metaObject(), p); if (!v.isNull()) o->setProperty(p->attributeName().toUtf8(), v); }}/*! \internal*/QVariant QAbstractFormBuilder::toVariant(const QMetaObject *meta, DomProperty *p){ QVariant v; switch(p->kind()) { case DomProperty::Bool: { v = toBool(p->elementBool()); } break; case DomProperty::Cstring: { v = p->elementCstring(); } break; case DomProperty::Point: { DomPoint *point = p->elementPoint(); QPoint pt(point->elementX(), point->elementY()); v = QVariant(pt); } break; case DomProperty::PointF: { DomPointF *pointf = p->elementPointF(); QPointF pt(pointf->elementX(), pointf->elementY()); v = QVariant(pt); } break; case DomProperty::Size: { DomSize *size = p->elementSize(); QSize sz(size->elementWidth(), size->elementHeight()); v = QVariant(sz); } break; case DomProperty::SizeF: { DomSizeF *sizef = p->elementSizeF(); QSizeF sz(sizef->elementWidth(), sizef->elementHeight()); v = QVariant(sz); } break; case DomProperty::Rect: { DomRect *rc = p->elementRect(); QRect g(rc->elementX(), rc->elementY(), rc->elementWidth(), rc->elementHeight()); v = QVariant(g); } break; case DomProperty::RectF: { DomRectF *rcf = p->elementRectF(); QRectF g(rcf->elementX(), rcf->elementY(), rcf->elementWidth(), rcf->elementHeight()); v = QVariant(g); } break; case DomProperty::String: { int index = meta->indexOfProperty(p->attributeName().toUtf8()); if (index != -1 && meta->property(index).type() == QVariant::KeySequence) v = qVariantFromValue(QKeySequence(p->elementString()->text())); else v = p->elementString()->text(); } break; case DomProperty::Number: { v = p->elementNumber(); } break; case DomProperty::LongLong: { v = p->elementLongLong(); } break; case DomProperty::Double: { v = p->elementDouble(); } break; case DomProperty::Char: { DomChar *character = p->elementChar(); QChar c(character->elementUnicode()); v = qVariantFromValue(c); } break; case DomProperty::Color: { DomColor *color = p->elementColor(); QColor c(color->elementRed(), color->elementGreen(), color->elementBlue()); v = qVariantFromValue(c); } break; case DomProperty::Font: { DomFont *font = p->elementFont(); QFont f; if (font->hasElementFamily() && !font->elementFamily().isEmpty()) f.setFamily(font->elementFamily()); if (font->hasElementPointSize() && font->elementPointSize() > 0) f.setPointSize(font->elementPointSize()); if (font->hasElementWeight() && font->elementWeight() > 0) f.setWeight(font->elementWeight()); if (font->hasElementItalic()) f.setItalic(font->elementItalic()); if (font->hasElementBold()) f.setBold(font->elementBold()); if (font->hasElementUnderline()) f.setUnderline(font->elementUnderline()); if (font->hasElementStrikeOut()) f.setStrikeOut(font->elementStrikeOut()); if (font->hasElementKerning()) f.setKerning(font->elementKerning()); if (font->hasElementAntialiasing()) { f.setStyleStrategy(font->elementAntialiasing() ? QFont::PreferDefault : QFont::NoAntialias); } 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::Url: { DomUrl *url = p->elementUrl(); QUrl u(url->elementString()->text()); v = QVariant(u); } 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())));
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -