diff options
Diffstat (limited to 'src/designer/src/components/formeditor')
3 files changed, 30 insertions, 6 deletions
diff --git a/src/designer/src/components/formeditor/formwindow.cpp b/src/designer/src/components/formeditor/formwindow.cpp index b03be6c82..1f638ec8e 100644 --- a/src/designer/src/components/formeditor/formwindow.cpp +++ b/src/designer/src/components/formeditor/formwindow.cpp @@ -2140,6 +2140,14 @@ bool FormWindow::handleContextMenu(QWidget *, QWidget *managedWidget, QContextMe bool FormWindow::setContents(QIODevice *dev, QString *errorMessageIn /* = 0 */) { + QDesignerResource r(this); + QScopedPointer<DomUI> ui(r.readUi(dev)); + if (ui.isNull()) { + if (errorMessageIn) + *errorMessageIn = r.errorString(); + return false; + } + UpdateBlocker ub(this); clearSelection(); m_selection->clearSelectionPool(); @@ -2151,8 +2159,7 @@ bool FormWindow::setContents(QIODevice *dev, QString *errorMessageIn /* = 0 */) m_undoStack.clear(); emit changed(); - QDesignerResource r(this); - QWidget *w = r.load(dev, formContainer()); + QWidget *w = r.loadUi(ui.data(), formContainer()); if (w) { setMainContainer(w); emit changed(); diff --git a/src/designer/src/components/formeditor/qdesigner_resource.cpp b/src/designer/src/components/formeditor/qdesigner_resource.cpp index b799e648c..caca4d497 100644 --- a/src/designer/src/components/formeditor/qdesigner_resource.cpp +++ b/src/designer/src/components/formeditor/qdesigner_resource.cpp @@ -461,6 +461,11 @@ QDesignerResource::~QDesignerResource() { } +DomUI *QDesignerResource::readUi(QIODevice *dev) +{ + return d->readUi(dev); +} + static inline QString messageBoxTitle() { return QApplication::translate("Designer", "Qt Designer"); @@ -596,10 +601,19 @@ void QDesignerResource::saveDom(DomUI *ui, QWidget *widget) QWidget *QDesignerResource::load(QIODevice *dev, QWidget *parentWidget) { - QWidget *w = QEditorFormBuilder::load(dev, parentWidget); - if (w) // Store the class name as 'reset' value for the main container's object name. - w->setProperty("_q_classname", w->objectName()); - return w; + QScopedPointer<DomUI> ui(readUi(dev)); + return ui.isNull() ? nullptr : loadUi(ui.data(), parentWidget); +} + +QWidget *QDesignerResource::loadUi(DomUI *ui, QWidget *parentWidget) +{ + QWidget *widget = create(ui, parentWidget); + // Store the class name as 'reset' value for the main container's object name. + if (widget) + widget->setProperty("_q_classname", widget->objectName()); + else if (d->m_errorString.isEmpty()) + d->m_errorString = QFormBuilderExtra::msgInvalidUiFile(); + return widget; } bool QDesignerResource::saveRelative() const diff --git a/src/designer/src/components/formeditor/qdesigner_resource.h b/src/designer/src/components/formeditor/qdesigner_resource.h index f444f6334..87620f600 100644 --- a/src/designer/src/components/formeditor/qdesigner_resource.h +++ b/src/designer/src/components/formeditor/qdesigner_resource.h @@ -78,6 +78,9 @@ public: QWidget *load(QIODevice *dev, QWidget *parentWidget) override; + DomUI *readUi(QIODevice *dev); + QWidget *loadUi(DomUI *ui, QWidget *parentWidget); + protected: using QEditorFormBuilder::create; using QEditorFormBuilder::createDom; |