qdesigner_resource.cpp
来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 1,680 行 · 第 1/5 页
CPP
1,680 行
m_formWindow->setFileName(QString()); } else { errorMessage = QApplication::translate("Designer", "The converted file could not be read."); } } if (w) { QMessageBox::information(parentWidget->window(), QApplication::translate("Designer", "Qt Designer"), QApplication::translate("Designer", "This file was created using Designer from Qt-%1 and" " will be converted to a new form by Qt Designer.\n" "The old form has been untouched, but you will have to save this form" " under a new name.").arg(version), QMessageBox::Ok, 0); return w; } QMessageBox::warning(parentWidget->window(), QApplication::translate("Designer", "Qt Designer"), QApplication::translate("Designer", "This file was created using Designer from Qt-%1 and " "could not be read:<br>%2<br>" "Please run it through <b>uic3 -convert</b> to convert " "it to Qt-4's ui format.").arg(version).arg(errorMessage), QMessageBox::Ok, 0); return 0; } case LoadPreCheckOk: break; } qdesigner_internal::WidgetFactory *factory = qobject_cast<qdesigner_internal::WidgetFactory*>(core()->widgetFactory()); Q_ASSERT(factory != 0); QDesignerFormWindowInterface *previousFormWindow = factory->currentFormWindow(m_formWindow); m_isMainWidget = true; QWidget *mainWidget = QAbstractFormBuilder::create(ui, parentWidget); if (mainWidget && m_formWindow) { m_formWindow->setAuthor(ui->elementAuthor()); m_formWindow->setComment(ui->elementComment()); m_formWindow->setExportMacro(ui->elementExportMacro()); // Designer data QVariantMap designerFormData; if (ui->hasElementDesignerdata()) { const DomPropertyList domPropertyList = ui->elementDesignerdata()->elementProperty(); const DomPropertyList::const_iterator cend = domPropertyList.constEnd(); for (DomPropertyList::const_iterator it = domPropertyList.constBegin(); it != cend; ++it) { const QVariant vprop = domPropertyToVariant(this, mainWidget->metaObject(), *it); if (vprop.type() != QVariant::Invalid) designerFormData.insert((*it)->attributeName(), vprop); } } m_formWindow->setFormData(designerFormData); m_formWindow->setPixmapFunction(ui->elementPixmapFunction()); if (DomLayoutDefault *def = ui->elementLayoutDefault()) { m_formWindow->setLayoutDefault(def->attributeMargin(), def->attributeSpacing()); } if (DomLayoutFunction *fun = ui->elementLayoutFunction()) { m_formWindow->setLayoutFunction(fun->attributeMargin(), fun->attributeSpacing()); } if (DomIncludes *includes = ui->elementIncludes()) { const QString global = QLatin1String("global"); QStringList includeHints; foreach (DomInclude *incl, includes->elementInclude()) { QString text = incl->text(); if (text.isEmpty()) continue; if (incl->hasAttributeLocation() && incl->attributeLocation() == global ) { text = text.prepend(QLatin1Char('<')).append(QLatin1Char('>')); } else { text = text.prepend(QLatin1Char('"')).append(QLatin1Char('"')); } includeHints.append(text); } m_formWindow->setIncludeHints(includeHints); } for (int index = 0; index < m_formWindow->toolCount(); ++index) { QDesignerFormWindowToolInterface *tool = m_formWindow->tool(index); Q_ASSERT(tool != 0); tool->loadFromDom(ui, mainWidget); } } factory->currentFormWindow(previousFormWindow); return mainWidget;}QWidget *QDesignerResource::create(DomWidget *ui_widget, QWidget *parentWidget){ const QString className = ui_widget->attributeClass(); if (!m_isMainWidget && className == QLatin1String("QWidget") && ui_widget->elementLayout().size() && !ui_widget->hasAttributeNative()) { // ### check if elementLayout.size() == 1 QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(core()->extensionManager(), parentWidget); if (container == 0) { // generate a QLayoutWidget iff the parent is not an QDesignerContainerExtension. ui_widget->setAttributeClass(QLatin1String("QLayoutWidget")); } } // save the actions const QList<DomActionRef*> actionRefs = ui_widget->elementAddAction(); ui_widget->setElementAddAction(QList<DomActionRef*>()); QWidget *w = QAbstractFormBuilder::create(ui_widget, parentWidget); // restore the actions ui_widget->setElementAddAction(actionRefs); if (w == 0) return 0; // ### generalize using the extension manager QDesignerMenu *menu = qobject_cast<QDesignerMenu*>(w); QDesignerMenuBar *menuBar = qobject_cast<QDesignerMenuBar*>(w); QToolBar *toolBar = qobject_cast<QToolBar*>(w); if (menu) { menu->interactive(false); menu->hide(); } else if (menuBar) { menuBar->interactive(false); } foreach (DomActionRef *ui_action_ref, actionRefs) { const QString name = ui_action_ref->attributeName(); if (name == QLatin1String("separator")) { QAction *sep = new QAction(w); sep->setSeparator(true); w->addAction(sep); addMenuAction(sep); } else if (QAction *a = m_actions.value(name)) { w->addAction(a); } else if (QActionGroup *g = m_actionGroups.value(name)) { w->addActions(g->actions()); } else if (QMenu *menu = qFindChild<QMenu*>(w, name)) { w->addAction(menu->menuAction()); addMenuAction(menu->menuAction()); } } if (menu) { menu->interactive(true); menu->adjustSpecialActions(); } else if (menuBar) { menuBar->interactive(true); menuBar->adjustSpecialActions(); } else if (toolBar) { ToolBarEventFilter::adjustSpecialActions(toolBar); } ui_widget->setAttributeClass(className); // fix the class name applyExtensionDataFromDOM(this, core(), ui_widget, w, true); // store user-defined scripts if (MetaDataBase *metaDataBase = qobject_cast<MetaDataBase *>(core()->metaDataBase())) { const QString designerSource = QLatin1String("designer"); const DomScripts domScripts = ui_widget->elementScript(); if (!domScripts.empty()) { foreach (const DomScript *script, domScripts) { if (script->hasAttributeSource() && script->attributeSource() == designerSource) { metaDataBase->metaDataBaseItem(w)->setScript(script->text()); } } } } return w;}QLayout *QDesignerResource::create(DomLayout *ui_layout, QLayout *layout, QWidget *parentWidget){ 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 (ui_layoutItem->kind() == DomLayoutItem::Spacer) { QHash<QString, DomProperty*> properties = propertyMap(ui_layoutItem->elementSpacer()->elementProperty()); Spacer *spacer = (Spacer*) 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*>(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); o->setObjectName(objName);}void QDesignerResource::applyProperties(QObject *o, const QList<DomProperty*> &properties){ if (properties.empty()) return; QDesignerPropertySheetExtension *sheet = qt_extension<QDesignerPropertySheetExtension*>(core()->extensionManager(), o); if (!sheet) return; QFormBuilderExtra *formBuilderExtra = QFormBuilderExtra::instance(this); QDesignerDynamicPropertySheetExtension *dynamicSheet = qt_extension<QDesignerDynamicPropertySheetExtension*>(core()->extensionManager(), o); const bool dynamicPropertiesAllowed = dynamicSheet && dynamicSheet->dynamicPropertiesAllowed(); const QString objectNameProperty = QLatin1String("objectName"); const DomPropertyList::const_iterator cend = properties.constEnd(); for (DomPropertyList::const_iterator it = properties.constBegin(); it != cend; ++it) { const DomProperty *p = *it; const QString propertyName = p->attributeName(); const int index = sheet->indexOf(propertyName); QVariant v; if (p->kind() == DomProperty::Enum && qVariantCanConvert<EnumType>(sheet->property(index))) { const EnumType e = qvariant_cast<EnumType>(sheet->property(index)); if (e.items.contains(p->elementEnum())) v = e.items[p->elementEnum()]; } else if (p->kind() == DomProperty::Set && qVariantCanConvert<FlagType>(sheet->property(index))) { const FlagType e = qvariant_cast<FlagType>(sheet->property(index)); uint flags = 0; QStringList items = p->elementSet().split(QLatin1String("|")); foreach (QString item, items) { if (e.items.contains(item)) flags |= e.items[item].toUInt(); } v = flags; } else { v = toVariant(o->metaObject(), *it); } QDesignerMetaDataBaseItemInterface *item = 0; if (core()->metaDataBase()) item = core()->metaDataBase()->item(o); if (!item) { qDebug() << "** WARNING no ``meta database item'' for object:" << o; } if (p->kind() == DomProperty::String && item) { const DomString *str = p->elementString(); if (str->hasAttributeComment()) { setPropertyComment(core(), o, propertyName, str->attributeComment()); } } formBuilderExtra->applyPropertyInternally(o, propertyName, v); if (index != -1) { sheet->setProperty(index, v); sheet->setChanged(index, true); } else if (dynamicPropertiesAllowed) { const int idx = dynamicSheet->addDynamicProperty(p->attributeName(), QVariant(v.type())); if (idx != -1) { sheet->setProperty(idx, v); sheet->setChanged(idx, v != QVariant(v.type())); } } if (propertyName == objectNameProperty) changeObjectName(o, o->objectName()); } if (QSplitter *splitter = qobject_cast<QSplitter *>(o)) { WidgetFactory::createUnmanagedLayout(splitter, splitter->orientation() == Qt::Horizontal ? LayoutInfo::HBox : LayoutInfo::VBox); }}QWidget *QDesignerResource::createWidget(const QString &widgetName, QWidget *parentWidget, const QString &_name){ QString name = _name; QString className = widgetName; if (m_isMainWidget) m_isMainWidget = false; QWidget *w = core()->widgetFactory()->createWidget(className, parentWidget); if (!w) return 0; if (name.isEmpty()) { QDesignerWidgetDataBaseInterface *db = core()->widgetDataBase(); if (QDesignerWidgetDataBaseItemInterface *item = db->item(db->indexOfObject(w))) name = qtify(item->name()); } changeObjectName(w, name); QDesignerContainerExtension *container = qt_extension<QDesignerContainerExtension*>(core()->extensionManager(), parentWidget); if (!qobject_cast<QMenu*>(w) && (!parentWidget || !container)) { m_formWindow->manageWidget(w); if (parentWidget) { QList<QWidget *> list = qVariantValue<QWidgetList>(parentWidget->property("_q_widgetOrder")); list.append(w); QVariant v; qVariantSetValue(v, list); parentWidget->setProperty("_q_widgetOrder", v); }
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?