📄 abstractformbuilder.cpp
字号:
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::Double: { dom_prop->setElementDouble(v.toDouble()); } break; case QVariant::Bool: { dom_prop->setElementBool(v.toBool() ? QLatin1String("true") : QLatin1String("false")); } 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::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::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::Font: { DomFont *fnt = new DomFont(); QFont font = qvariant_cast<QFont>(v); fnt->setElementBold(font.bold()); fnt->setElementFamily(font.family()); fnt->setElementItalic(font.italic()); fnt->setElementPointSize(font.pointSize()); fnt->setElementStrikeOut(font.strikeOut()); fnt->setElementUnderline(font.underline()); fnt->setElementWeight(font.weight()); dom_prop->setElementFont(fnt); } break; case QVariant::Cursor: { dom_prop->setElementCursor(qvariant_cast<QCursor>(v).shape()); } break; case QVariant::KeySequence: { DomString *s = new DomString();#ifndef Q_WS_MAC s->setText(qvariant_cast<QKeySequence>(v).toString(QKeySequence::PortableText));#else s->setText(platformNeutralKeySequence(qvariant_cast<QKeySequence>(v)));#endif 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; case QVariant::Date: { DomDate *dom = new DomDate(); QDate date = qvariant_cast<QDate>(v); dom->setElementYear(date.year()); dom->setElementMonth(date.month()); dom->setElementDay(date.day()); dom_prop->setElementDate(dom); } break; case QVariant::Time: { DomTime *dom = new DomTime(); QTime time = qvariant_cast<QTime>(v); dom->setElementHour(time.hour()); dom->setElementMinute(time.minute()); dom->setElementSecond(time.second()); dom_prop->setElementTime(dom); } break; case QVariant::DateTime: { DomDateTime *dom = new DomDateTime(); QDateTime dateTime = qvariant_cast<QDateTime>(v); dom->setElementHour(dateTime.time().hour()); dom->setElementMinute(dateTime.time().minute()); dom->setElementSecond(dateTime.time().second()); dom->setElementYear(dateTime.date().year()); dom->setElementMonth(dateTime.date().month()); dom->setElementDay(dateTime.date().day()); dom_prop->setElementDateTime(dom); } break; case QVariant::Pixmap: case QVariant::Icon: { DomResourcePixmap *r = new DomResourcePixmap; QString icon_path; QString qrc_path; if (v.type() == QVariant::Icon) { QIcon icon = qvariant_cast<QIcon>(v); icon_path = iconToFilePath(icon); qrc_path = iconToQrcPath(icon); } else { QPixmap pixmap = qvariant_cast<QPixmap>(v); icon_path = pixmapToFilePath(pixmap); qrc_path = pixmapToQrcPath(pixmap); } if (qrc_path.isEmpty()) icon_path = workingDirectory().relativeFilePath(icon_path); else qrc_path = workingDirectory().relativeFilePath(qrc_path); icon_path = icon_path.replace(QLatin1Char('\\'), QLatin1Char('/')); qrc_path = qrc_path.replace(QLatin1Char('\\'), QLatin1Char('/')); r->setText(icon_path); if (!qrc_path.isEmpty()) r->setAttributeResource(qrc_path); if (v.type() == QVariant::Icon) dom_prop->setElementIconSet(r); else dom_prop->setElementPixmap(r); } break; default: { qWarning("support for property `%s' of type `%d' not implemented yet!!", pname.toUtf8().data(), v.type()); } break; } dom_prop->setAttributeName(pname); // ### dom_prop->setAttributeStdset(true); if (dom_prop->kind() == DomProperty::Unknown) { delete dom_prop; dom_prop = 0; } return dom_prop;}/*! \internal*/QList<DomProperty*> QAbstractFormBuilder::computeProperties(QObject *obj){ QList<DomProperty*> lst; const QMetaObject *meta = obj->metaObject(); QHash<QByteArray, bool> properties; for(int i=0; i<meta->propertyCount(); ++i) properties.insert(meta->property(i).name(), true); QList<QByteArray> propertyNames = properties.keys(); for(int i=0; i<propertyNames.size(); ++i) { QString pname = QString::fromUtf8(propertyNames.at(i)); QMetaProperty prop = meta->property(meta->indexOfProperty(pname.toUtf8())); if (!prop.isWritable() || !checkProperty(obj, QLatin1String(prop.name()))) continue; QVariant v = prop.read(obj); DomProperty *dom_prop = 0; if (v.type() == QVariant::Int) { dom_prop = new DomProperty(); if (prop.isFlagType()) qWarning("flags property not supported yet!!"); if (prop.isEnumType()) { QString scope = QString::fromUtf8(prop.enumerator().scope()); if (scope.size()) scope += QString::fromUtf8("::"); QString e = QString::fromUtf8(prop.enumerator().valueToKey(v.toInt())); if (e.size()) dom_prop->setElementEnum(scope + e); } else dom_prop->setElementNumber(v.toInt()); dom_prop->setAttributeName(pname); } else { dom_prop = createProperty(obj, pname, v); } if (!dom_prop || dom_prop->kind() == DomProperty::Unknown) delete dom_prop; else lst.append(dom_prop); } return lst;}/*! \internal*/bool QAbstractFormBuilder::toBool(const QString &str){ return str.toLower() == QLatin1String("true");}/*! \internal*/QHash<QString, DomProperty*> QAbstractFormBuilder::propertyMap(const QList<DomProperty*> &properties){ QHash<QString, DomProperty*> map; foreach (DomProperty *p, properties) map.insert(p->attributeName(), p); return map;}/*! \internal*/bool QAbstractFormBuilder::checkProperty(QObject *obj, const QString &prop) const{ Q_UNUSED(obj); Q_UNUSED(prop); return true;}/*! \internal*/QString QAbstractFormBuilder::toString(const DomString *str){ return str ? str->text() : QString();}/*! \internal*/void QAbstractFormBuilder::applyTabStops(QWidget *widget, DomTabStops *tabStops){ if (!tabStops) return; QWidget *lastWidget = 0; QStringList l = tabStops->elementTabStop(); for (int i=0; i<l.size(); ++i) { QString name = l.at(i); QWidget *child = qFindChild<QWidget*>(widget, name); if (!child) { qWarning("'%s' isn't a valid widget\n", name.toUtf8().data()); continue; } if (i == 0) { lastWidget = qFindChild<QWidget*>(widget, name); continue; } else if (!child || !lastWidget) { continue; } QWidget::setTabOrder(lastWidget, child); lastWidget = qFindChild<QWidget*>(widget, name); }}/*! \internal*/DomCustomWidgets *QAbstractFormBuilder::saveCustomWidgets(){ return 0;}/*! \internal*/DomTabStops *QAbstractFormBuilder::saveTabStops(){
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -