📄 qdesigner_resource.cpp
字号:
} ui_widget->setAttributeClass(className); // fix the class name if (QDesignerExtraInfoExtension *extra = qt_extension<QDesignerExtraInfoExtension*>(core()->extensionManager(), w)) { extra->loadWidgetExtraInfo(ui_widget); } return w;}QLayout *QDesignerResource::create(DomLayout *ui_layout, QLayout *layout, QWidget *parentWidget){ if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(parentWidget)) parentWidget = promoted->child(); QLayout *l = QAbstractFormBuilder::create(ui_layout, layout, parentWidget); if (QGridLayout *gridLayout = qobject_cast<QGridLayout*>(l)) QLayoutSupport::createEmptyCells(gridLayout); return l;}QLayoutItem *QDesignerResource::create(DomLayoutItem *ui_layoutItem, QLayout *layout, QWidget *parentWidget){ if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(parentWidget)) parentWidget = promoted->child(); if (ui_layoutItem->kind() == DomLayoutItem::Spacer) { QHash<QString, DomProperty*> properties = propertyMap(ui_layoutItem->elementSpacer()->elementProperty()); Spacer *spacer = (Spacer*) m_core->widgetFactory()->createWidget(QLatin1String("Spacer"), parentWidget); core()->metaDataBase()->add(spacer); spacer->setInteraciveMode(false); applyProperties(spacer, ui_layoutItem->elementSpacer()->elementProperty()); spacer->setInteraciveMode(true); if (m_formWindow) { m_formWindow->manageWidget(spacer); if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(m_core->extensionManager(), spacer)) sheet->setChanged(sheet->indexOf(QLatin1String("orientation")), true); } return new QWidgetItem(spacer); } else if (ui_layoutItem->kind() == DomLayoutItem::Layout && parentWidget) { DomLayout *ui_layout = ui_layoutItem->elementLayout(); QLayoutWidget *layoutWidget = new QLayoutWidget(m_formWindow, parentWidget); core()->metaDataBase()->add(layoutWidget); applyProperties(layoutWidget, ui_layout->elementProperty()); if (m_formWindow) { m_formWindow->manageWidget(layoutWidget); } (void) create(ui_layout, 0, layoutWidget); return new QWidgetItem(layoutWidget); } return QAbstractFormBuilder::create(ui_layoutItem, layout, parentWidget);}void QDesignerResource::changeObjectName(QObject *o, QString objName){ m_formWindow->unify(o, objName, true); if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(o)) { if (objName.startsWith(QLatin1String("__qt__promoted_"))) { promoted->setObjectName(objName); promoted->child()->setObjectName(objName.mid(15)); } else { promoted->child()->setObjectName(objName); promoted->setObjectName(QLatin1String("__qt__promoted_") + objName); } } else { o->setObjectName(objName); }}void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &properties){ if (QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(m_core->extensionManager(), o)) { for (int i=0; i<properties.size(); ++i) { DomProperty *p = properties.at(i); QString propertyName = p->attributeName(); int index = sheet->indexOf(propertyName); if (index != -1) { const QMetaObject *meta = 0; if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(o)) meta = promoted->child()->metaObject(); else meta = o->metaObject(); QVariant v = toVariant(meta, p); if (!core()->metaDataBase()->item(o)) { qWarning() << "** WARNING no ``meta database item'' for object:" << o; } if (p->kind() == DomProperty::String && qobject_cast<MetaDataBase*>(core()->metaDataBase()) && core()->metaDataBase()->item(o)) { DomString *str = p->elementString(); MetaDataBaseItem *item = static_cast<MetaDataBaseItem*>(core()->metaDataBase()->item(o)); if (str->hasAttributeComment()) { item->setPropertyComment(propertyName, str->attributeComment()); } } // ### move me if (QLayout *layout = qobject_cast<QLayout*>(o)) { if (propertyName == QLatin1String("margin") && qobject_cast<QLayoutWidget*>(layout->parentWidget())) v = v.toInt() + 1; } sheet->setProperty(index, v); sheet->setChanged(index, true); } if (propertyName == QLatin1String("objectName")) changeObjectName(o, o->objectName()); } QSplitter *splitter = qobject_cast<QSplitter *>(o); if (splitter) { QDesignerWidgetFactoryInterface *widgetFactory = m_core->widgetFactory(); widgetFactory->createLayout(splitter, 0, splitter->orientation() == Qt::Horizontal ? LayoutInfo::HBox : LayoutInfo::VBox); } }}QWidget *QDesignerResource::createWidget(const QString &widgetName, QWidget *parentWidget, const QString &_name){ if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(parentWidget)) parentWidget = promoted->child(); QString name = _name; QString className = widgetName; if (m_isMainWidget) m_isMainWidget = false; QWidget *w = m_core->widgetFactory()->createWidget(className, parentWidget); if (!w) return 0; if (name.isEmpty()) { QDesignerWidgetDataBaseInterface *db = m_core->widgetDataBase(); if (QDesignerWidgetDataBaseItemInterface *item = db->item(db->indexOfObject(w))) name = qtify(item->name()); } changeObjectName(w, name); QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(m_core->extensionManager(), parentWidget); if (!qobject_cast<QMenu*>(w) && (!parentWidget || !container)) { m_formWindow->manageWidget(w); } else { m_core->metaDataBase()->add(w); } w->setWindowFlags(w->windowFlags() & ~Qt::Window); return w;}QLayout *QDesignerResource::createLayout(const QString &layoutName, QObject *parent, const QString &name){ if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(parent)) parent = promoted->child(); QWidget *layoutBase = 0; QLayout *layout = qobject_cast<QLayout*>(parent); if (parent->isWidgetType()) layoutBase = static_cast<QWidget*>(parent); else { Q_ASSERT( layout != 0 ); layoutBase = layout->parentWidget(); } LayoutInfo::Type layoutType = LayoutInfo::Grid; if (layoutName == QLatin1String("QVBoxLayout")) layoutType = LayoutInfo::VBox; else if (layoutName == QLatin1String("QHBoxLayout")) layoutType = LayoutInfo::HBox; else if (layoutName == QLatin1String("QStackedLayout")) layoutType = LayoutInfo::Stacked; QLayout *lay = m_core->widgetFactory()->createLayout(layoutBase, layout, layoutType); if (lay != 0) changeObjectName(lay, name); return lay;}// saveDomWidget *QDesignerResource::createDom(QWidget *widget, DomWidget *ui_parentWidget, bool recursive){ QDesignerMetaDataBaseItemInterface *item = m_core->metaDataBase()->item(widget); if (!item) return 0; if (qobject_cast<Spacer*>(widget) && m_copyWidget == false) { ++m_topLevelSpacerCount; return 0; } QDesignerWidgetDataBaseItemInterface *widgetInfo = 0; int widgetInfoIndex = m_core->widgetDataBase()->indexOfObject(widget, false); if (widgetInfoIndex != -1) { widgetInfo = m_core->widgetDataBase()->item(widgetInfoIndex); if (widgetInfo->isCustom()) { if (widgetInfo->extends().isEmpty()) { const QMetaObject *mo = widget->metaObject()->superClass(); while (mo != 0) { if (m_core->widgetDataBase()->indexOfClassName(QLatin1String(mo->className())) != -1) { widgetInfo->setExtends(QLatin1String(mo->className())); break; } mo = mo->superClass(); } } m_usedCustomWidgets.insert(widgetInfo, true); } } DomWidget *w = 0; if (QDesignerTabWidget *tabWidget = qobject_cast<QDesignerTabWidget*>(widget)) w = saveWidget(tabWidget, ui_parentWidget); else if (QDesignerStackedWidget *stackedWidget = qobject_cast<QDesignerStackedWidget*>(widget)) w = saveWidget(stackedWidget, ui_parentWidget); else if (QDesignerToolBox *toolBox = qobject_cast<QDesignerToolBox*>(widget)) w = saveWidget(toolBox, ui_parentWidget); else if (QDesignerToolBar *toolBar = qobject_cast<QDesignerToolBar*>(widget)) w = saveWidget(toolBar, ui_parentWidget); else if (QDesignerDockWidget *dockWidget = qobject_cast<QDesignerDockWidget*>(widget)) w = saveWidget(dockWidget, ui_parentWidget); else if (QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(m_core->extensionManager(), widget)) w = saveWidget(widget, container, ui_parentWidget); else if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(widget)) w = createDom(promoted->child(), ui_parentWidget, recursive); else w = QAbstractFormBuilder::createDom(widget, ui_parentWidget, recursive); Q_ASSERT( w != 0 ); QString className = w->attributeClass(); if (m_internal_to_qt.contains(className)) w->setAttributeClass(m_internal_to_qt.value(className)); w->setAttributeName(widget->objectName()); if (QDesignerPromotedWidget *promoted = qobject_cast<QDesignerPromotedWidget*>(widget)) { Q_ASSERT(widgetInfo != 0); w->setAttributeName(promoted->child()->objectName()); w->setAttributeClass(widgetInfo->name()); QList<DomProperty*> prop_list = w->elementProperty(); foreach (DomProperty *prop, prop_list) { if (prop->attributeName() == QLatin1String("geometry")) { if (DomRect *rect = prop->elementRect()) { rect->setElementX(widget->x()); rect->setElementY(widget->y()); } break; } } } if (QDesignerExtraInfoExtension *extra = qt_extension<QDesignerExtraInfoExtension*>(core()->extensionManager(), widget)) { extra->saveWidgetExtraInfo(w); } return w;}DomLayout *QDesignerResource::createDom(QLayout *layout, DomLayout *ui_parentLayout, DomWidget *ui_parentWidget){ QDesignerMetaDataBaseItemInterface *item = m_core->metaDataBase()->item(layout); if (item == 0) { layout = qFindChild<QLayout*>(layout); // refresh the meta database item item = m_core->metaDataBase()->item(layout); } if (item == 0) { // nothing to do. return 0; } if (qobject_cast<QSplitter*>(layout->parentWidget()) != 0) { // nothing to do. return 0; } m_chain.push(layout); DomLayout *l = QAbstractFormBuilder::createDom(layout, ui_parentLayout, ui_parentWidget); Q_ASSERT(l != 0); m_chain.pop(); return l;}DomLayoutItem *QDesignerResource::createDom(QLayoutItem *item, DomLayout *ui_layout, DomWidget *ui_parentWidget){ DomLayoutItem *ui_item = 0; if (Spacer *s = qobject_cast<Spacer*>(item->widget())) { if (!m_core->metaDataBase()->item(s)) return 0; DomSpacer *spacer = new DomSpacer(); QList<DomProperty*> properties = computeProperties(item->widget()); // ### filter the properties spacer->setElementProperty(properties); ui_item = new DomLayoutItem(); ui_item->setElementSpacer(spacer); m_laidout.insert(item->widget(), true); } else if (QLayoutWidget *layoutWidget = qobject_cast<QLayoutWidget*>(item->widget())) { Q_ASSERT(layoutWidget->layout()); DomLayout *l = createDom(layoutWidget->layout(), ui_layout, ui_parentWidget); ui_item = new DomLayoutItem(); ui_item->setElementLayout(l); m_laidout.insert(item->widget(), true); } else if (!item->spacerItem()) { // we use spacer as fake item in the Designer ui_item = QAbstractFormBuilder::createDom(item, ui_layout, ui_parentWidget); } else { return 0; } if (m_chain.size() && item->widget()) { if (QGridLayout *grid = qobject_cast<QGridLayout*>(m_chain.top())) { int index = Utils::indexOfWidget(grid, item->widget()); int row, column, rowspan, colspan; grid->getItemPosition(index, &row, &column, &rowspan, &colspan); ui_item->setAttributeRow(row); ui_item->setAttributeColumn(column); if (colspan != 1) ui_item->setAttributeColSpan(colspan); if (rowspan != 1) ui_item->setAttributeRowSpan(rowspan); } } return ui_item;}void QDesignerResource::createCustomWidgets(DomCustomWidgets *dom_custom_widgets){ if (dom_custom_widgets == 0) return; QList<DomCustomWidget*> custom_widget_list = dom_custom_widgets->elementCustomWidget(); QDesignerWidgetDataBaseInterface *db = m_formWindow->core()->widgetDataBase(); foreach(DomCustomWidget *custom_widget, custom_widget_list) { WidgetDataBaseItem *item = new WidgetDataBaseItem(custom_widget->elementClass()); QString base_class = custom_widget->elementExtends(); item->setExtends(base_class);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -