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