abstractformbuilder.cpp

来自「奇趣公司比较新的qt/emd版本」· C++ 代码 · 共 2,006 行 · 第 1/5 页

CPP
2,006
字号
/*!    \internal*/DomLayoutItem *QAbstractFormBuilder::createDom(QLayoutItem *item, DomLayout *ui_layout, DomWidget *ui_parentWidget){    DomLayoutItem *ui_item = new DomLayoutItem();    if (item->widget())  {        ui_item->setElementWidget(createDom(item->widget(), ui_parentWidget));        m_laidout.insert(item->widget(), true);    } else if (item->layout()) {        ui_item->setElementLayout(createDom(item->layout(), ui_layout, ui_parentWidget));    } else if (item->spacerItem()) {        ui_item->setElementSpacer(createDom(item->spacerItem(), ui_layout, ui_parentWidget));    }    return ui_item;}/*!    \internal*/DomSpacer *QAbstractFormBuilder::createDom(QSpacerItem *spacer, DomLayout *ui_layout, DomWidget *ui_parentWidget){    Q_UNUSED(ui_layout);    Q_UNUSED(ui_parentWidget);    DomSpacer *ui_spacer = new DomSpacer();    QList<DomProperty*> properties;    DomProperty *prop = 0;    // sizeHint property    prop = new DomProperty();    prop->setAttributeName(QLatin1String("sizeHint"));    prop->setElementSize(new DomSize());    prop->elementSize()->setElementWidth(spacer->sizeHint().width());    prop->elementSize()->setElementHeight(spacer->sizeHint().height());    properties.append(prop);    // orientation property    prop = new DomProperty(); // ### we don't implemented the case where expandingDirections() is both Vertical and Horizontal    prop->setAttributeName(QLatin1String("orientation"));    prop->setElementEnum((spacer->expandingDirections() & Qt::Horizontal) ? QLatin1String("Qt::Horizontal") : QLatin1String("Qt::Vertical"));    properties.append(prop);    ui_spacer->setElementProperty(properties);    return ui_spacer;}/*!    \internal*/DomProperty *QAbstractFormBuilder::createProperty(QObject *obj, const QString &pname, const QVariant &v){    if (!checkProperty(obj, pname)) {        return 0;    }    return variantToDomProperty(this, obj, pname, v);}/*!    \internal*/QList<DomProperty*> QAbstractFormBuilder::computeProperties(QObject *obj){    QList<DomProperty*> lst;    const QMetaObject *meta = obj->metaObject();    QHash<QByteArray, bool> properties;    for(int i=0; i<meta->propertyCount(); ++i)        properties.insert(meta->property(i).name(), true);    const QList<QByteArray> propertyNames = properties.keys();    for(int i=0; i<propertyNames.size(); ++i) {        const QString pname = QString::fromUtf8(propertyNames.at(i));        const QMetaProperty prop = meta->property(meta->indexOfProperty(pname.toUtf8()));        if (!prop.isWritable() || !checkProperty(obj, QLatin1String(prop.name())))            continue;        const QVariant v = prop.read(obj);        DomProperty *dom_prop = 0;        if (v.type() == QVariant::Int) {            dom_prop = new DomProperty();            if (prop.isFlagType())                uiLibWarning(QObject::tr("Flags property are not supported yet."));            if (prop.isEnumType()) {                QString scope = QString::fromUtf8(prop.enumerator().scope());                if (scope.size())                    scope += QString::fromUtf8("::");                const QString e = QString::fromUtf8(prop.enumerator().valueToKey(v.toInt()));                if (e.size())                    dom_prop->setElementEnum(scope + e);            } else                dom_prop->setElementNumber(v.toInt());            dom_prop->setAttributeName(pname);        } else {            dom_prop = createProperty(obj, pname, v);        }        if (!dom_prop || dom_prop->kind() == DomProperty::Unknown)            delete dom_prop;        else            lst.append(dom_prop);    }    return lst;}/*!   \internal   \typedef QAbstractFormBuilder::DomPropertyHash   \typedef QAbstractFormBuilder::IconPaths*//*!    \internal*/QAbstractFormBuilder::DomPropertyHash QAbstractFormBuilder::propertyMap(const QList<DomProperty*> &properties){    DomPropertyHash map;    foreach (DomProperty *p, properties)        map.insert(p->attributeName(), p);    return map;}/*!    \internal*/bool QAbstractFormBuilder::checkProperty(QObject *obj, const QString &prop) const{    Q_UNUSED(obj);    Q_UNUSED(prop);    return true;}/*!    \internal*/QString QAbstractFormBuilder::toString(const DomString *str){    return str ? str->text() : QString();}/*!    \internal*/void QAbstractFormBuilder::applyTabStops(QWidget *widget, DomTabStops *tabStops){    if (!tabStops)        return;    QWidget *lastWidget = 0;    const QStringList l = tabStops->elementTabStop();    for (int i=0; i<l.size(); ++i) {        const QString name = l.at(i);        QWidget *child = qFindChild<QWidget*>(widget, name);        if (!child) {            uiLibWarning(QObject::tr("While applying tab stops: The widget '%1' could not be found.").arg(name));            continue;        }        if (i == 0) {            lastWidget = qFindChild<QWidget*>(widget, name);            continue;        } else if (!child || !lastWidget) {            continue;        }        QWidget::setTabOrder(lastWidget, child);        lastWidget = qFindChild<QWidget*>(widget, name);    }}/*!    \internal*/DomCustomWidgets *QAbstractFormBuilder::saveCustomWidgets(){    return 0;}/*!    \internal*/DomTabStops *QAbstractFormBuilder::saveTabStops(){    return 0;}/*!    \internal*/DomResources *QAbstractFormBuilder::saveResources(){    return 0;}/*!    \internal*/void QAbstractFormBuilder::saveTreeWidgetExtraInfo(QTreeWidget *treeWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget){    Q_UNUSED(ui_parentWidget);    QList<DomColumn*> columns;    // save the header    for (int c = 0; c<treeWidget->columnCount(); ++c) {        DomColumn *column = new DomColumn;        QList<DomProperty*> properties;        // property text        DomProperty *ptext = new DomProperty;        DomString *str = new DomString;        str->setText(treeWidget->headerItem()->text(c));        ptext->setAttributeName(QLatin1String("text"));        ptext->setElementString(str);        properties.append(ptext);        if ( DomProperty *p = iconToDomProperty(treeWidget->headerItem()->icon(c)))            properties.append(p);        column->setElementProperty(properties);        columns.append(column);    }    ui_widget->setElementColumn(columns);    QList<DomItem *> items = ui_widget->elementItem();    QQueue<QPair<QTreeWidgetItem *, DomItem *> > pendingQueue;    for (int i = 0; i < treeWidget->topLevelItemCount(); i++)        pendingQueue.enqueue(qMakePair(treeWidget->topLevelItem(i), (DomItem *)0));    while (!pendingQueue.isEmpty()) {        const QPair<QTreeWidgetItem *, DomItem *> pair = pendingQueue.dequeue();        QTreeWidgetItem *item = pair.first;        DomItem *parentDomItem = pair.second;        DomItem *currentDomItem = new DomItem;        QList<DomProperty*> properties;        for (int c = 0; c < treeWidget->columnCount(); c++) {            DomProperty *ptext = new DomProperty;            DomString *str = new DomString;            str->setText(item->text(c));            ptext->setAttributeName(QLatin1String("text"));            ptext->setElementString(str);            properties.append(ptext);            if (DomProperty *p = iconToDomProperty(item->icon(c)))                properties.append(p);        }        currentDomItem->setElementProperty(properties);        if (parentDomItem) {            QList<DomItem *> childrenItems = parentDomItem->elementItem();            childrenItems.append(currentDomItem);            parentDomItem->setElementItem(childrenItems);        } else            items.append(currentDomItem);        for (int i = 0; i < item->childCount(); i++)            pendingQueue.enqueue(qMakePair(item->child(i), currentDomItem));    }    ui_widget->setElementItem(items);}/*!    \internal*/void QAbstractFormBuilder::saveTableWidgetExtraInfo(QTableWidget *tableWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget){    Q_UNUSED(ui_parentWidget);    // save the horizontal header    QList<DomColumn*> columns;    for (int c = 0; c < tableWidget->columnCount(); c++) {        DomColumn *column = new DomColumn;        QList<DomProperty*> properties;        QTableWidgetItem *item = tableWidget->horizontalHeaderItem(c);        if (item) {            // property text            DomProperty *ptext = new DomProperty;            DomString *str = new DomString;            str->setText(item->text());            ptext->setAttributeName(QLatin1String("text"));            ptext->setElementString(str);            properties.append(ptext);            if (DomProperty *p = iconToDomProperty(item->icon()))                properties.append(p);        }        column->setElementProperty(properties);        columns.append(column);    }    ui_widget->setElementColumn(columns);    // save the vertical header    QList<DomRow*> rows;    for (int r = 0; r < tableWidget->rowCount(); r++) {        DomRow *row = new DomRow;        QList<DomProperty*> properties;        QTableWidgetItem *item = tableWidget->verticalHeaderItem(r);        if (item) {            // property text            DomProperty *ptext = new DomProperty;            DomString *str = new DomString;            str->setText(item->text());            ptext->setAttributeName(QLatin1String("text"));            ptext->setElementString(str);            properties.append(ptext);            if (DomProperty *p = iconToDomProperty(item->icon()))                properties.append(p);        }        row->setElementProperty(properties);        rows.append(row);    }    ui_widget->setElementRow(rows);    QList<DomItem *> items = ui_widget->elementItem();    for (int r = 0; r < tableWidget->rowCount(); r++)        for (int c = 0; c < tableWidget->columnCount(); c++) {            QTableWidgetItem *item = tableWidget->item(r, c);            if (item) {                DomItem *domItem = new DomItem;                domItem->setAttributeRow(r);                domItem->setAttributeColumn(c);                QList<DomProperty*> properties;                DomProperty *ptext = new DomProperty;                DomString *str = new DomString;                str->setText(item->text());                ptext->setAttributeName(QLatin1String("text"));                ptext->setElementString(str);                properties.append(ptext);                if (DomProperty *p = iconToDomProperty(item->icon()))                    properties.append(p);                domItem->setElementProperty(properties);                items.append(domItem);            }        }    ui_widget->setElementItem(items);}/*!    \internal*/void QAbstractFormBuilder::saveListWidgetExtraInfo(QListWidget *listWidget, DomWidget *ui_widget, DomWidget *ui_parentWidget){    Q_UNUSED(ui_parentWidget);    QList<DomItem*> ui_items = ui_widget->elementItem();    for (int i=0; i<listWidget->count(); ++i) {        QListWidgetItem *item = listWidget->item(i);        DomItem *ui_item = new DomItem();        QList<DomProperty*> properties;        // text        DomString *str = new DomString;        str->setText(item->text());        DomProperty *p = 0;        p = new DomProperty;        p->setAttributeName(QLatin1String("text"));        p->setElementString(str);        properties.append(p);        if (DomProperty *p = iconToDomProperty(item->icon()))            properties.append(p);        ui_item->setElementProperty(properties);        ui_items.append(ui_item);    }

⌨️ 快捷键说明

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