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 + -
显示快捷键?