📄 converter.cpp
字号:
QList<DomWidget*> ui_child_list; QList<DomRow*> ui_row_list; QList<DomColumn*> ui_column_list; QList<DomItem*> ui_item_list; QList<DomProperty*> ui_property_list; QList<DomProperty*> ui_attribute_list; QList<DomLayout*> ui_layout_list; QList<DomActionRef*> ui_action_list; QList<DomWidget*> ui_mainwindow_child_list; createProperties(w, &ui_property_list, className); createAttributes(w, &ui_attribute_list, className); DomWidget *ui_mainWindow = 0; DomWidget *ui_centralWidget = 0; if (className == QLatin1String("QMainWindow") || className == QLatin1String("Q3MainWindow")) { ui_centralWidget = new DomWidget; ui_centralWidget->setAttributeClass(QLatin1String("QWidget")); ui_mainwindow_child_list.append(ui_centralWidget); ui_mainWindow = ui_widget; } QDomElement e = w.firstChild().toElement(); const bool inQ3ToolBar = className == QLatin1String("Q3ToolBar"); while (!e.isNull()) { QString t = e.tagName().toLower(); if (t == QLatin1String("vbox") || t == QLatin1String("hbox") || t == QLatin1String("grid")) { DomLayout *lay = createLayout(e); Q_ASSERT(lay != 0); if (ui_layout_list.isEmpty()) { ui_layout_list.append(lay); } else { // it's not possible to have more than one layout for widget! delete lay; } } else if (t == QLatin1String("spacer")) { // hmm, spacer as child of a widget.. it doesn't make sense, so skip it! } else if (t == QLatin1String("widget")) { DomWidget *ui_child = createWidget(e); Q_ASSERT(ui_child != 0); bool isLayoutWidget = ui_child->attributeClass() == QLatin1String("QLayoutWidget"); if (isLayoutWidget) ui_child->setAttributeClass(QLatin1String("QWidget")); foreach (DomLayout *layout, ui_child->elementLayout()) { fixLayoutMargin(layout); } QString widgetClass = ui_child->attributeClass(); if (widgetClass == QLatin1String("QMenuBar") || widgetClass == QLatin1String("QToolBar") || widgetClass == QLatin1String("QStatusBar")) { ui_mainwindow_child_list.append(ui_child); } else { ui_child_list.append(ui_child); } if (inQ3ToolBar) { DomActionRef *ui_action_ref = new DomActionRef(); ui_action_ref->setAttributeName(ui_child->attributeName()); ui_action_list.append(ui_action_ref); } } else if (t == QLatin1String("action")) { DomActionRef *a = new DomActionRef(); a->read(e); ui_action_list.append(a); } else if (t == QLatin1String("separator")) { DomActionRef *a = new DomActionRef(); a->setAttributeName(QLatin1String("separator")); ui_action_list.append(a); } else if (t == QLatin1String("property")) { // skip the property it is already handled by createProperties QString name = e.attribute(QLatin1String("name")); // change the varname this widget if (name == QLatin1String("name")) ui_widget->setAttributeName(DomTool::readProperty(w, QLatin1String("name"), QVariant()).toString()); } else if (t == QLatin1String("row")) { DomRow *row = new DomRow(); row->read(e); ui_row_list.append(row); } else if (t == QLatin1String("column")) { DomColumn *column = new DomColumn(); column->read(e); ui_column_list.append(column); } else if (isMenu && t == QLatin1String("item")) { QString text = e.attribute(QLatin1String("text")); QString name = e.attribute(QLatin1String("name")); QString accel = e.attribute(QLatin1String("accel")); QList<DomProperty*> properties; DomProperty *atitle = new DomProperty(); atitle->setAttributeName(QLatin1String("title")); DomString *str = new DomString(); str->setText(text); atitle->setElementString(str); properties.append(atitle); DomWidget *menu = createWidget(e, QLatin1String("QMenu")); menu->setAttributeName(name); menu->setElementProperty(properties); ui_child_list.append(menu); DomActionRef *a = new DomActionRef(); a->setAttributeName(name); ui_action_list.append(a); } else if (t == QLatin1String("item")) { DomItem *item = new DomItem(); item->read(e); ui_item_list.append(item); } e = e.nextSibling().toElement(); } ui_widget->setElementProperty(ui_property_list); ui_widget->setElementAttribute(ui_attribute_list); if (ui_centralWidget != 0) { Q_ASSERT(ui_mainWindow != 0); ui_mainWindow->setElementWidget(ui_mainwindow_child_list); ui_widget = ui_centralWidget; } ui_widget->setElementWidget(ui_child_list); ui_widget->setElementAddAction(ui_action_list); ui_widget->setElementRow(ui_row_list); ui_widget->setElementColumn(ui_column_list); ui_widget->setElementItem(ui_item_list); ui_widget->setElementLayout(ui_layout_list); //ui_widget->setAttributeName(p->elementCstring()); return ui_mainWindow ? ui_mainWindow : ui_widget;}DomLayout *Ui3Reader::createLayout(const QDomElement &w){ DomLayout *lay = new DomLayout(); QList<DomLayoutItem*> ui_item_list; QList<DomProperty*> ui_property_list; QList<DomProperty*> ui_attribute_list; QString tagName = w.tagName().toLower(); QString className; if (tagName == QLatin1String("vbox")) className = QLatin1String("QVBoxLayout"); else if (tagName == QLatin1String("hbox")) className = QLatin1String("QHBoxLayout"); else className = QLatin1String("QGridLayout"); lay->setAttributeClass(className); createProperties(w, &ui_property_list, className); createAttributes(w, &ui_attribute_list, className); QDomElement e = w.firstChild().toElement(); while (!e.isNull()) { QString t = e.tagName().toLower(); if (t == QLatin1String("vbox") || t == QLatin1String("hbox") || t == QLatin1String("grid") || t == QLatin1String("spacer") || t == QLatin1String("widget")) { DomLayoutItem *lay_item = createLayoutItem(e); Q_ASSERT(lay_item != 0); ui_item_list.append(lay_item); } e = e.nextSibling().toElement(); } lay->setElementItem(ui_item_list); lay->setElementProperty(ui_property_list); lay->setElementAttribute(ui_attribute_list); return lay;}DomLayoutItem *Ui3Reader::createLayoutItem(const QDomElement &e){ DomLayoutItem *lay_item = new DomLayoutItem; QString tagName = e.tagName().toLower(); if (tagName == QLatin1String("widget")) { DomWidget *ui_widget = createWidget(e); Q_ASSERT(ui_widget != 0); if (ui_widget->attributeClass() == QLatin1String("QLayoutWidget") && ui_widget->elementLayout().size() == 1) { QList<DomLayout*> layouts = ui_widget->elementLayout(); ui_widget->setElementLayout(QList<DomLayout*>()); delete ui_widget; DomLayout *layout = layouts.first(); fixLayoutMargin(layout); lay_item->setElementLayout(layout); } else { if (ui_widget->attributeClass() == QLatin1String("QLayoutWidget")) ui_widget->setAttributeClass(QLatin1String("QWidget")); lay_item->setElementWidget(ui_widget); } } else if (tagName == QLatin1String("spacer")) { DomSpacer *ui_spacer = new DomSpacer(); QList<DomProperty*> properties; QByteArray name = DomTool::readProperty(e, QLatin1String("name"), QLatin1String("spacer")).toByteArray(); Variant var; var.createSize(0, 0); QVariant def = qVariantFromValue(var); Size size = asVariant(DomTool::readProperty(e, QLatin1String("sizeHint"), def)).size; QString sizeType = QLatin1String("QSizePolicy::") + DomTool::readProperty(e, QLatin1String("sizeType"), QLatin1String("Expanding")).toString(); QString orientation = QLatin1String("Qt::") + DomTool::readProperty(e, QLatin1String("orientation"), QLatin1String("Horizontal")).toString(); ui_spacer->setAttributeName(QLatin1String(name)); DomProperty *prop = 0; // sizeHint prop = new DomProperty(); prop->setAttributeName(QLatin1String("sizeHint")); prop->setElementSize(new DomSize()); prop->elementSize()->setElementWidth(size.width); prop->elementSize()->setElementHeight(size.height); properties.append(prop); // sizeType prop = new DomProperty(); prop->setAttributeName(QLatin1String("sizeType")); prop->setElementEnum(sizeType); properties.append(prop); // orientation prop = new DomProperty(); prop->setAttributeName(QLatin1String("orientation")); prop->setElementEnum(orientation); properties.append(prop); ui_spacer->setElementProperty(properties); lay_item->setElementSpacer(ui_spacer); } else { DomLayout *ui_layout = createLayout(e); Q_ASSERT(ui_layout != 0); fixLayoutMargin(ui_layout); lay_item->setElementLayout(ui_layout); } if (e.hasAttribute(QLatin1String("row"))) lay_item->setAttributeRow(e.attribute(QLatin1String("row")).toInt()); if (e.hasAttribute(QLatin1String("column"))) lay_item->setAttributeColumn(e.attribute(QLatin1String("column")).toInt()); if (e.hasAttribute(QLatin1String("rowspan"))) lay_item->setAttributeRowSpan(e.attribute(QLatin1String("rowspan")).toInt()); if (e.hasAttribute(QLatin1String("colspan"))) lay_item->setAttributeColSpan(e.attribute(QLatin1String("colspan")).toInt()); return lay_item;}void Ui3Reader::fixLayoutMargin(DomLayout *ui_layout){ Q_UNUSED(ui_layout)}void Ui3Reader::findDerivedFontProperties(const QDomElement &n, DomFont &result) const{ bool italic = false; bool bold = false; bool underline = false; bool strikeout = false; QDomNode pn = n.parentNode(); while(!pn.isNull()) { for (QDomElement e=pn.firstChild().toElement(); !e.isNull(); e = e.nextSibling().toElement()) { if (e.tagName().toLower() == QLatin1String("property") && e.attribute(QLatin1String("name")) == QLatin1String("font")) { QDomElement f = e.firstChild().toElement(); for (QDomElement fp = f.firstChild().toElement(); !fp.isNull(); fp = fp.nextSibling().toElement()) { QString name = fp.tagName().toLower(); QString text = fp.text(); if (!italic && name == QLatin1String("italic")) { italic = true; if (text == QLatin1String("true") || text == QLatin1String("1")) result.setElementItalic(true); } else if (!bold && name == QLatin1String("bold")) { bold = true; if (text == QLatin1String("true") || text == QLatin1String("1")) result.setElementBold(true); } else if (!underline && name == QLatin1String("underline")) { underline = true; if (text == QLatin1String("true") || text == QLatin1String("1")) result.setElementUnderline(true); } else if (!strikeout && name == QLatin1String("strikeout")) { strikeout = true; if (text == QLatin1String("true") || text == QLatin1String("1")) result.setElementStrikeOut(true); } else if (name == QLatin1String("family")) { if (result.elementFamily().isEmpty()) result.setElementFamily(text); } else if (name == QLatin1String("pointsize")) { if (!result.elementPointSize()) result.setElementPointSize(text.toInt()); } }
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -