📄 cppwriteinitialization.cpp
字号:
if (ifndefMac) str << "#endif\n"; return; } } if (suppressDefault) return; // get default if (m_state[p] & HasDefaultFunction) { writeSetter(indent, objectName, setter, m_functions[p], str); return; } if (m_state[p] & HasDefaultValue) { writeSetter(indent, objectName, setter, m_defaultValues[p], str); } return;}void WriteInitialization::LayoutDefaultHandler::writeProperties(const QString &indent, const QString &varName, const DomPropertyMap &properties, int marginType, bool suppressMarginDefault, QTextStream &str) const { // Write out properties and ignore the ones found in // subsequent writing of the property list. int defaultSpacing = marginType == WriteInitialization::Use43UiFile ? -1 : 6; writeProperty(Spacing, indent, varName, properties, QLatin1String("spacing"), QLatin1String("setSpacing"), defaultSpacing, false, str); // We use 9 as TopLevelMargin, since Designer seem to always use 9. static const int layoutmargins[4] = {-1, 9, 9, 0}; writeProperty(Margin, indent, varName, properties, QLatin1String("margin"), QLatin1String("setMargin"), layoutmargins[marginType], suppressMarginDefault, str);}// --- WriteInitializationWriteInitialization::WriteInitialization(Uic *uic, bool activateScripts) : m_uic(uic), m_driver(uic->driver()), m_output(uic->output()), m_option(uic->option()), m_layoutMarginType(TopLevelMargin), m_delayedOut(&m_delayedInitialization, QIODevice::WriteOnly), m_refreshOut(&m_refreshInitialization, QIODevice::WriteOnly), m_actionOut(&m_delayedActionInitialization, QIODevice::WriteOnly), m_activateScripts(activateScripts), m_layoutWidget(false){}void WriteInitialization::acceptUI(DomUI *node){ m_registeredImages.clear(); m_actionGroupChain.push(0); m_widgetChain.push(0); m_layoutChain.push(0); acceptLayoutDefault(node->elementLayoutDefault()); acceptLayoutFunction(node->elementLayoutFunction()); if (node->elementCustomWidgets()) TreeWalker::acceptCustomWidgets(node->elementCustomWidgets()); if (node->elementImages()) TreeWalker::acceptImages(node->elementImages()); if (m_option.generateImplemetation) m_output << "#include <" << m_driver->headerFileName() << ">\n\n"; m_stdsetdef = true; if (node->hasAttributeStdSetDef()) m_stdsetdef = node->attributeStdSetDef(); const QString className = node->elementClass() + m_option.postfix; m_generatedClass = className; const QString varName = m_driver->findOrInsertWidget(node->elementWidget()); m_registeredWidgets.insert(varName, node->elementWidget()); // register the main widget const QString widgetClassName = node->elementWidget()->attributeClass(); m_output << m_option.indent << "void " << "setupUi(" << widgetClassName << " *" << varName << ")\n" << m_option.indent << "{\n"; if (m_activateScripts) writeSetupUIScriptVariableDeclarations( m_option.indent, m_output); const QStringList connections = m_uic->databaseInfo()->connections(); for (int i=0; i<connections.size(); ++i) { QString connection = connections.at(i); if (connection == QLatin1String("(default)")) continue; const QString varConn = connection + QLatin1String("Connection"); m_output << m_option.indent << varConn << " = QSqlDatabase::database(" << fixString(connection, m_option.indent) << ");\n"; } acceptWidget(node->elementWidget()); for (int i=0; i<m_buddies.size(); ++i) { const Buddy &b = m_buddies.at(i); if (!m_registeredWidgets.contains(b.objName)) { fprintf(stderr, "'%s' isn't a valid widget\n", b.objName.toLatin1().data()); continue; } else if (!m_registeredWidgets.contains(b.buddy)) { fprintf(stderr, "'%s' isn't a valid widget\n", b.buddy.toLatin1().data()); continue; } m_output << m_option.indent << b.objName << "->setBuddy(" << b.buddy << ");\n"; } if (node->elementTabStops()) acceptTabStops(node->elementTabStops()); if (m_delayedActionInitialization.size()) m_output << "\n" << m_delayedActionInitialization; m_output << "\n" << m_option.indent << "retranslateUi(" << varName << ");\n"; if (node->elementConnections()) acceptConnections(node->elementConnections()); if (!m_delayedInitialization.isEmpty()) m_output << "\n" << m_delayedInitialization << "\n"; if (m_option.autoConnection) m_output << "\n" << m_option.indent << "QMetaObject::connectSlotsByName(" << varName << ");\n"; m_output << m_option.indent << "} // setupUi\n\n"; if (m_delayedActionInitialization.isEmpty()) { m_refreshInitialization += m_option.indent; m_refreshInitialization += QLatin1String("Q_UNUSED("); m_refreshInitialization += varName ; m_refreshInitialization +=QLatin1String(");\n"); } m_output << m_option.indent << "void " << "retranslateUi(" << widgetClassName << " *" << varName << ")\n" << m_option.indent << "{\n" << m_refreshInitialization << m_option.indent << "} // retranslateUi\n\n"; m_layoutChain.pop(); m_widgetChain.pop(); m_actionGroupChain.pop();}void WriteInitialization::acceptWidget(DomWidget *node){ m_layoutMarginType = m_widgetChain.count() == 1 ? TopLevelMargin : ChildMargin; const QString className = node->attributeClass(); const QString varName = m_driver->findOrInsertWidget(node); m_registeredWidgets.insert(varName, node); // register the current widget QString parentWidget, parentClass; if (m_widgetChain.top()) { parentWidget = m_driver->findOrInsertWidget(m_widgetChain.top()); parentClass = m_widgetChain.top()->attributeClass(); } const QString savedParentWidget = parentWidget; if (m_uic->isContainer(parentClass) || m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3ToolBar"))) parentWidget.clear(); if (m_widgetChain.size() != 1) m_output << m_option.indent << varName << " = new " << m_uic->customWidgetsInfo()->realClassName(className) << '(' << parentWidget << ");\n"; parentWidget = savedParentWidget; if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QComboBox"))) { initializeComboBox(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QListWidget"))) { initializeListWidget(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTreeWidget"))) { initializeTreeWidget(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QTableWidget"))) { initializeTableWidget(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ListBox"))) { initializeQ3ListBox(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3ListView"))) { initializeQ3ListView(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3IconView"))) { initializeQ3IconView(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3Table"))) { initializeQ3Table(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3DataTable"))) { initializeQ3SqlDataTable(node); } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("Q3DataBrowser"))) { initializeQ3SqlDataBrowser(node); } if (m_uic->isButton(className)) { const DomPropertyMap attributes = propertyMap(node->elementAttribute()); if (const DomProperty *prop = attributes.value(QLatin1String("buttonGroup"))) { const QString groupName = toString(prop->elementString()); if (!m_buttonGroups.contains(groupName)) { m_buttonGroups.insert(groupName, m_driver->findOrInsertName(groupName)); const QString g = m_buttonGroups.value(groupName); m_output << m_option.indent << "QButtonGroup *" << g << " = new QButtonGroup(" << m_generatedClass << ");\n"; } const QString g = m_buttonGroups.value(groupName); m_output << m_option.indent << g << "->addButton(" << varName << ");\n"; } } writeProperties(varName, className, node->elementProperty()); if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QMenu")) && parentWidget.size()) { initializeMenu(node, parentWidget); } if (node->elementLayout().isEmpty()) m_layoutChain.push(0); m_layoutWidget = false; if (className == QLatin1String("QWidget") && !node->hasAttributeNative()) { if (m_widgetChain.top() && m_widgetChain.top()->attributeClass() != "QMainWindow" && !m_uic->isContainer(m_widgetChain.top()->attributeClass())) m_layoutWidget = true; } m_widgetChain.push(node); m_layoutChain.push(0); TreeWalker::acceptWidget(node); m_layoutChain.pop(); m_widgetChain.pop(); m_layoutWidget = false; const DomPropertyMap attributes = propertyMap(node->elementAttribute()); QString title = QLatin1String("Page"); if (const DomProperty *ptitle = attributes.value(QLatin1String("title"))) { title = toString(ptitle->elementString()); } QString label = QLatin1String("Page"); if (const DomProperty *plabel = attributes.value(QLatin1String("label"))) { label = toString(plabel->elementString()); } int id = -1; if (const DomProperty *pid = attributes.value(QLatin1String("id"))) { id = pid->elementNumber(); } if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QMainWindow")) || m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3MainWindow"))) { if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QMenuBar"))) { if (!m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3MainWindow"))) m_output << m_option.indent << parentWidget << "->setMenuBar(" << varName <<");\n"; } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QToolBar"))) { m_output << m_option.indent << parentWidget << "->addToolBar(" << toolBarAreaStringFromDOMAttributes(attributes) << varName << ");\n"; if (const DomProperty *pbreak = attributes.value(QLatin1String("toolBarBreak"))) { if (pbreak->elementBool() == QLatin1String("true")) { m_output << m_option.indent << parentWidget << "->insertToolBarBreak(" << varName << ");\n"; } } } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QDockWidget"))) { QString area; if (DomProperty *pstyle = attributes.value(QLatin1String("dockWidgetArea"))) { area += QLatin1String("static_cast<Qt::DockWidgetArea>("); area += QString::number(pstyle->elementNumber()); area += QLatin1String("), "); } m_output << m_option.indent << parentWidget << "->addDockWidget(" << area << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(className, QLatin1String("QStatusBar"))) { m_output << m_option.indent << parentWidget << "->setStatusBar(" << varName << ");\n"; } else if (className == QLatin1String("QWidget")) { m_output << m_option.indent << parentWidget << "->setCentralWidget(" << varName << ");\n"; } } if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QStackedWidget"))) { m_output << m_option.indent << parentWidget << "->addWidget(" << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QToolBar"))) { m_output << m_option.indent << parentWidget << "->addWidget(" << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("Q3WidgetStack"))) { m_output << m_option.indent << parentWidget << "->addWidget(" << varName << ", " << id << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QDockWidget"))) { m_output << m_option.indent << parentWidget << "->setWidget(" << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QSplitter"))) { m_output << m_option.indent << parentWidget << "->addWidget(" << varName << ");\n"; } else if (m_uic->customWidgetsInfo()->extends(parentClass, QLatin1String("QToolBox"))) { QString icon; if (const DomProperty *picon = attributes.value(QLatin1String("icon"))) { icon += QLatin1String(", ") ; icon += pixCall(picon); } m_output << m_option.indent << parentWidget << "->addItem(" << varName << icon << ", " << trCall(label) << ");\n"; m_refreshOut << m_option.indent << parentWidget << "->setItemText(" << parentWidget << "->indexOf(" << varName << "), " << trCall(label) << ");\n";#ifndef QT_NO_TOOLTIP if (DomProperty *ptoolTip = attributes.value(QLatin1String("toolTip"))) { m_refreshOut << m_option.indent << parentWidget << "->setItemToolTip("
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -