86QWidget *QFormBuilder::create(DomWidget *ui_widget, QWidget *parentWidget)
88 if (!d->parentWidgetIsSet())
89 d->setParentWidget(parentWidget);
92 d->setProcessingLayoutWidget(
false);
93 if (ui_widget->attributeClass() ==
"QWidget"_L1 && !ui_widget->hasAttributeNative()
95#if QT_CONFIG(mainwindow)
96 && !qobject_cast<QMainWindow *>(parentWidget)
99 && !qobject_cast<QToolBox *>(parentWidget)
101#if QT_CONFIG(stackedwidget)
102 && !qobject_cast<QStackedWidget *>(parentWidget)
104#if QT_CONFIG(tabwidget)
105 && !qobject_cast<QTabWidget *>(parentWidget)
107#if QT_CONFIG(scrollarea)
108 && !qobject_cast<QScrollArea *>(parentWidget)
110#if QT_CONFIG(mdiarea)
111 && !qobject_cast<QMdiArea *>(parentWidget)
113#if QT_CONFIG(dockwidget)
114 && !qobject_cast<QDockWidget *>(parentWidget)
117 const QString parentClassName = QLatin1StringView(parentWidget->metaObject()->className());
118 if (!d->isCustomWidgetContainer(parentClassName))
119 d->setProcessingLayoutWidget(
true);
121 return QAbstractFormBuilder::create(ui_widget, parentWidget);
128QWidget *QFormBuilder::createWidget(
const QString &widgetName, QWidget *parentWidget,
const QString &name)
130 if (widgetName.isEmpty()) {
132 qWarning() << QCoreApplication::translate(
"QFormBuilder",
"An empty class name was passed on to %1 (object name: '%2').").arg(QString::fromUtf8(Q_FUNC_INFO), name);
136 QWidget *w =
nullptr;
138#if QT_CONFIG(tabwidget)
139 if (qobject_cast<QTabWidget*>(parentWidget))
140 parentWidget =
nullptr;
142#if QT_CONFIG(stackedwidget)
143 if (qobject_cast<QStackedWidget*>(parentWidget))
144 parentWidget =
nullptr;
146#if QT_CONFIG(toolbox)
147 if (qobject_cast<QToolBox*>(parentWidget))
148 parentWidget =
nullptr;
153 if (widgetName ==
"Line"_L1) {
154 w =
new QFrame(parentWidget);
155 static_cast<QFrame*>(w)->setFrameStyle(QFrame::HLine | QFrame::Sunken);
158 QWidget *newWidget = createWidgetInstance(widgetName, parentWidget);
160 Q_ASSERT(w ==
nullptr);
166 QDesignerCustomWidgetInterface *factory = d->m_customWidgets.value(widgetName);
167 if (factory !=
nullptr)
168 w = factory->createWidget(parentWidget);
172 const QString baseClassName = d->customWidgetBaseClass(widgetName);
173 if (!baseClassName.isEmpty()) {
174 qWarning() << QCoreApplication::translate(
"QFormBuilder",
"QFormBuilder was unable to create a custom widget of the class '%1'; defaulting to base class '%2'.").arg(widgetName, baseClassName);
175 return createWidget(baseClassName, parentWidget, name);
180 qWarning() << QCoreApplication::translate(
"QFormBuilder",
"QFormBuilder was unable to create a widget of the class '%1'.").arg(widgetName);
184 w->setObjectName(name);
186 if (qobject_cast<QDialog *>(w))
187 w->setParent(parentWidget);
195QLayout *QFormBuilder::createLayout(
const QString &layoutName, QObject *parent,
const QString &name)
197 auto *parentWidget = qobject_cast<QWidget*>(parent);
198 auto *parentLayout = qobject_cast<QLayout*>(parent);
199 Q_ASSERT(parentWidget || parentLayout);
201 QLayout *l = createLayoutInstance(layoutName, parentLayout ?
nullptr : parentWidget);
203 l->setObjectName(name);
205 qWarning() << QCoreApplication::translate(
"QFormBuilder",
"The layout type `%1' is not supported.").arg(layoutName);
249void QFormBuilder::createConnections(DomConnections *ui_connections, QWidget *widget)
251 Q_ASSERT(widget !=
nullptr);
253 if (ui_connections ==
nullptr)
256 const auto &connections = ui_connections->elementConnection();
257 for (
const DomConnection *c : connections) {
258 QObject *sender = objectByName(widget, c->elementSender());
259 QObject *receiver = objectByName(widget, c->elementReceiver());
260 if (!sender || !receiver)
263 QByteArray sig = c->elementSignal().toUtf8();
265 QByteArray sl = c->elementSlot().toUtf8();
267 QObject::connect(sender, sig.constData(), receiver, sl.constData());
282QLayout *QFormBuilder::create(DomLayout *ui_layout, QLayout *layout, QWidget *parentWidget)
286 bool layoutWidget = d->processingLayoutWidget();
287 QLayout *l = QAbstractFormBuilder::create(ui_layout, layout, parentWidget);
289 int left = 0, top = 0, right = 0, bottom = 0;
290 QFormBuilderExtra::getLayoutMargins(ui_layout->elementProperty(),
291 &left, &top, &right, &bottom);
292 l->setContentsMargins(left, top, right, bottom);
293 d->setProcessingLayoutWidget(
false);