⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 abstractformbuilder.cpp

📁 qt-x11-opensource-src-4.1.4.tar.gz源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
    }    foreach (DomActionRef *ui_action_ref, ui_widget->elementAddAction()) {        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());        }    }    loadExtraInfo(ui_widget, w, parentWidget);    addItem(ui_widget, w, parentWidget);    if (qobject_cast<QDialog *>(w) && parentWidget)        w->setAttribute(Qt::WA_Moved, false); // So that QDialog::setVisible(true) will center it    return w;}/*!    \internal*/QAction *QAbstractFormBuilder::create(DomAction *ui_action, QObject *parent){    QAction *a = createAction(parent, ui_action->attributeName());    if (!a)        return 0;    applyProperties(a, ui_action->elementProperty());    return a;}/*!    \internal*/QActionGroup *QAbstractFormBuilder::create(DomActionGroup *ui_action_group, QObject *parent){    QActionGroup *a = createActionGroup(parent, ui_action_group->attributeName());    if (!a)        return 0;    applyProperties(a, ui_action_group->elementProperty());    foreach (DomAction *ui_action, ui_action_group->elementAction()) {        QAction *child_action = create(ui_action, a);        Q_UNUSED( child_action );    }    foreach (DomActionGroup *g, ui_action_group->elementActionGroup()) {        QActionGroup *child_action_group = create(g, parent);        Q_UNUSED( child_action_group );    }    return a;}/*!    \internal*/bool QAbstractFormBuilder::addItem(DomWidget *ui_widget, QWidget *widget, QWidget *parentWidget){    QHash<QString, DomProperty*> attributes = propertyMap(ui_widget->elementAttribute());    QString title = QLatin1String("Page");    if (DomProperty *ptitle = attributes.value(QLatin1String("title"))) {        title = toString(ptitle->elementString());    }    QString label = QLatin1String(QLatin1String("Page"));    if (DomProperty *plabel = attributes.value(QLatin1String("label"))) {        label = toString(plabel->elementString());    }    if (QMainWindow *mw = qobject_cast<QMainWindow*>(parentWidget)) {        // the menubar        if (QMenuBar *menuBar = qobject_cast<QMenuBar*>(widget)) {            mw->setMenuBar(menuBar);            return true;        }        // apply the toolbar's attributes        else if (QToolBar *toolBar = qobject_cast<QToolBar*>(widget)) {            if (DomProperty *attr = attributes.value(QLatin1String("toolBarArea"))) {                Qt::ToolBarArea area = static_cast<Qt::ToolBarArea>(attr->elementNumber());                mw->addToolBar(area, toolBar);            } else {                mw->addToolBar(toolBar);            }            return true;        }        // statusBar        else if (QStatusBar *statusBar = qobject_cast<QStatusBar*>(widget)) {            mw->setStatusBar(statusBar);            return true;        }        // apply the dockwidget's attributes        else if (QDockWidget *dockWidget = qobject_cast<QDockWidget*>(widget)) {            if (DomProperty *attr = attributes.value(QLatin1String("dockWidgetArea"))) {                Qt::DockWidgetArea area = static_cast<Qt::DockWidgetArea>(attr->elementNumber());                mw->addDockWidget(area, dockWidget);            } else {                mw->addDockWidget(Qt::LeftDockWidgetArea, dockWidget);            }            return true;        }        else if (! mw->centralWidget()) {            mw->setCentralWidget(widget);            return true;        }    }    else if (QTabWidget *tabWidget = qobject_cast<QTabWidget*>(parentWidget)) {        widget->setParent(0);        int tabIndex = tabWidget->count();        tabWidget->addTab(widget, title);        if (DomProperty *picon = attributes.value(QLatin1String("icon"))) {            tabWidget->setTabIcon(tabIndex, qvariant_cast<QIcon>(toVariant(0, picon)));        }        if (DomProperty *ptoolTip = attributes.value(QLatin1String("toolTip"))) {            tabWidget->setTabToolTip(tabIndex, toString(ptoolTip->elementString()));        }        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::Size: {        DomSize *size = p->elementSize();        QSize sz(size->elementWidth(), size->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::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::Double: {        v = p->elementDouble();    } 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->elementFamily().isEmpty())            f.setFamily(font->elementFamily());        if (font->elementPointSize() > 0)            f.setPointSize(font->elementPointSize());        if (font->elementWeight() > 0)            f.setWeight(font->elementWeight());

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -