📄 abstractformbuilder.cpp
字号:
case QVariant::Date: { DomDate *dom = new DomDate(); QDate date = qvariant_cast<QDate>(v); dom->setElementYear(date.year()); dom->setElementMonth(date.month()); dom->setElementDay(date.day()); dom_prop->setElementDate(dom); } break; case QVariant::Time: { DomTime *dom = new DomTime(); QTime time = qvariant_cast<QTime>(v); dom->setElementHour(time.hour()); dom->setElementMinute(time.minute()); dom->setElementSecond(time.second()); dom_prop->setElementTime(dom); } break; case QVariant::DateTime: { DomDateTime *dom = new DomDateTime(); QDateTime dateTime = qvariant_cast<QDateTime>(v); dom->setElementHour(dateTime.time().hour()); dom->setElementMinute(dateTime.time().minute()); dom->setElementSecond(dateTime.time().second()); dom->setElementYear(dateTime.date().year()); dom->setElementMonth(dateTime.date().month()); dom->setElementDay(dateTime.date().day()); dom_prop->setElementDateTime(dom); } break; case QVariant::Url: { DomUrl *dom = new DomUrl(); QUrl url = v.toUrl(); DomString *str = new DomString(); str->setText(url.toString()); dom->setElementString(str); dom_prop->setElementUrl(dom); } break; case QVariant::Pixmap: case QVariant::Icon: { DomResourcePixmap *r = new DomResourcePixmap; QString icon_path; QString qrc_path; if (v.type() == QVariant::Icon) { QIcon icon = qvariant_cast<QIcon>(v); icon_path = iconToFilePath(icon); qrc_path = iconToQrcPath(icon); } else { QPixmap pixmap = qvariant_cast<QPixmap>(v); icon_path = pixmapToFilePath(pixmap); qrc_path = pixmapToQrcPath(pixmap); } if (qrc_path.isEmpty()) icon_path = workingDirectory().relativeFilePath(icon_path); else qrc_path = workingDirectory().relativeFilePath(qrc_path); icon_path = icon_path.replace(QLatin1Char('\\'), QLatin1Char('/')); qrc_path = qrc_path.replace(QLatin1Char('\\'), QLatin1Char('/')); r->setText(icon_path); if (!qrc_path.isEmpty()) r->setAttributeResource(qrc_path); if (v.type() == QVariant::Icon) dom_prop->setElementIconSet(r); else dom_prop->setElementPixmap(r); } break; case QVariant::StringList: { DomStringList *sl = new DomStringList; sl->setElementString(qvariant_cast<QStringList>(v)); dom_prop->setElementStringList(sl); } break; default: { qWarning("support for property `%s' of type `%d' not implemented yet!!", pname.toUtf8().data(), v.type()); } break; } dom_prop->setAttributeName(pname); // ### dom_prop->setAttributeStdset(true); if (dom_prop->kind() == DomProperty::Unknown) { delete dom_prop; dom_prop = 0; } return dom_prop;}/*! \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); QList<QByteArray> propertyNames = properties.keys(); for(int i=0; i<propertyNames.size(); ++i) { QString pname = QString::fromUtf8(propertyNames.at(i)); QMetaProperty prop = meta->property(meta->indexOfProperty(pname.toUtf8())); if (!prop.isWritable() || !checkProperty(obj, QLatin1String(prop.name()))) continue; QVariant v = prop.read(obj); DomProperty *dom_prop = 0; if (v.type() == QVariant::Int) { dom_prop = new DomProperty(); if (prop.isFlagType()) qWarning("flags property not supported yet!!"); if (prop.isEnumType()) { QString scope = QString::fromUtf8(prop.enumerator().scope()); if (scope.size()) scope += QString::fromUtf8("::"); 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*/bool QAbstractFormBuilder::toBool(const QString &str){ return str.toLower() == QLatin1String("true");}/*! \internal*/QHash<QString, DomProperty*> QAbstractFormBuilder::propertyMap(const QList<DomProperty*> &properties){ QHash<QString, DomProperty*> 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; QStringList l = tabStops->elementTabStop(); for (int i=0; i<l.size(); ++i) { QString name = l.at(i); QWidget *child = qFindChild<QWidget*>(widget, name); if (!child) { qWarning("'%s' isn't a valid widget\n", name.toUtf8().data()); 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); QIcon icon = treeWidget->headerItem()->icon(c); if (!icon.isNull()) { QString iconPath = iconToFilePath(icon); QString qrcPath = iconToQrcPath(icon); DomProperty *p = new DomProperty; DomResourcePixmap *pix = new DomResourcePixmap; if (!qrcPath.isEmpty()) pix->setAttributeResource(qrcPath); pix->setText(iconPath); p->setAttributeName(QLatin1String("icon")); p->setElementIconSet(pix); 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()) { 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); QIcon icon = item->icon(c); if (!icon.isNull()) { QString iconPath = iconToFilePath(icon); QString qrcPath = iconToQrcPath(icon); DomProperty *p = new DomProperty; DomResourcePixmap *pix = new DomResourcePixmap; if (!qrcPath.isEmpty()) pix->setAttributeResource(qrcPath); pix->setText(iconPath); p->setAttributeName(QLatin1String("icon")); p->setElementIconSet(pix); 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); QIcon icon = item->icon(); if (!icon.isNull()) { QString iconPath = iconToFilePath(icon); QString qrcPath = iconToQrcPath(icon); DomProperty *p = new DomProperty; DomResourcePixmap *pix = new DomResourcePixmap; if (!qrcPath.isEmpty()) pix->setAttributeResource(qrcPath); pix->setText(iconPath); p->setAttributeName(QLatin1Strin
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -