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

📄 abstractformbuilder.cpp

📁 QT 开发环境里面一个很重要的文件
💻 CPP
📖 第 1 页 / 共 5 页
字号:
        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::PointF: {        DomPointF *pointf = p->elementPointF();        QPointF pt(pointf->elementX(), pointf->elementY());        v = QVariant(pt);    } break;    case DomProperty::Size: {        DomSize *size = p->elementSize();        QSize sz(size->elementWidth(), size->elementHeight());        v = QVariant(sz);    } break;    case DomProperty::SizeF: {        DomSizeF *sizef = p->elementSizeF();        QSizeF sz(sizef->elementWidth(), sizef->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::RectF: {        DomRectF *rcf = p->elementRectF();        QRectF g(rcf->elementX(), rcf->elementY(), rcf->elementWidth(), rcf->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::LongLong: {        v = p->elementLongLong();    } break;    case DomProperty::Double: {        v = p->elementDouble();    } break;    case DomProperty::Char: {        DomChar *character = p->elementChar();        QChar c(character->elementUnicode());        v = qVariantFromValue(c);    } 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->hasElementFamily() && !font->elementFamily().isEmpty())            f.setFamily(font->elementFamily());        if (font->hasElementPointSize() && font->elementPointSize() > 0)            f.setPointSize(font->elementPointSize());        if (font->hasElementWeight() && font->elementWeight() > 0)            f.setWeight(font->elementWeight());        if (font->hasElementItalic())            f.setItalic(font->elementItalic());        if (font->hasElementBold())            f.setBold(font->elementBold());        if (font->hasElementUnderline())            f.setUnderline(font->elementUnderline());        if (font->hasElementStrikeOut())            f.setStrikeOut(font->elementStrikeOut());        if (font->hasElementKerning())            f.setKerning(font->elementKerning());        if (font->hasElementAntialiasing()) {            f.setStyleStrategy(font->elementAntialiasing() ? QFont::PreferDefault : QFont::NoAntialias);        }        v = qVariantFromValue(f);    } break;    case DomProperty::Date: {        DomDate *date = p->elementDate();        QDate d(date->elementYear(), date->elementMonth(), date->elementDay());        v = QVariant(d);    } break;    case DomProperty::Time: {        DomTime *t = p->elementTime();        QTime tm(t->elementHour(), t->elementMinute(), t->elementSecond());        v = QVariant(tm);    } break;    case DomProperty::DateTime: {        DomDateTime *dateTime = p->elementDateTime();        QDate d(dateTime->elementYear(), dateTime->elementMonth(), dateTime->elementDay());        QTime tm(dateTime->elementHour(), dateTime->elementMinute(), dateTime->elementSecond());        QDateTime dt(d, tm);        v = QVariant(dt);    } break;    case DomProperty::Url: {        DomUrl *url = p->elementUrl();        QUrl u(url->elementString()->text());        v = QVariant(u);    } break;    case DomProperty::Pixmap:    case DomProperty::IconSet: {        DomResourcePixmap *resource = 0;        if (p->kind() == DomProperty::IconSet)            resource = p->elementIconSet();        else            resource = p->elementPixmap();        if (resource != 0) {            QString icon_path = resource->text();            QString qrc_path = resource->attributeResource();            if (icon_path.isEmpty()) {                if (p->kind() == DomProperty::IconSet)                    return QIcon();                return QPixmap();            }            if (qrc_path.isEmpty())                icon_path = workingDirectory().absoluteFilePath(icon_path);            else                qrc_path = workingDirectory().absoluteFilePath(qrc_path);            if (p->kind() == DomProperty::IconSet) {                QIcon icon = nameToIcon(icon_path, qrc_path);                v = qVariantFromValue(icon);            } else {                QPixmap pixmap = nameToPixmap(icon_path, qrc_path);                v = qVariantFromValue(pixmap);            }        }    } break;    case DomProperty::Palette: {        DomPalette *dom = p->elementPalette();        QPalette palette;        if (dom->elementActive())            setupColorGroup(palette, QPalette::Active, dom->elementActive());        if (dom->elementInactive())            setupColorGroup(palette, QPalette::Inactive, dom->elementInactive());        if (dom->elementDisabled())            setupColorGroup(palette, QPalette::Disabled, dom->elementDisabled());        palette.setCurrentColorGroup(QPalette::Active);        v = qVariantFromValue(palette);    } break;    case DomProperty::Cursor: {        v = qVariantFromValue(QCursor(static_cast<Qt::CursorShape>(p->elementCursor())));

⌨️ 快捷键说明

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