diff options
author | Eike Ziller <eike.ziller@qt.io> | 2025-04-23 16:31:05 +0200 |
---|---|---|
committer | Eike Ziller <eike.ziller@qt.io> | 2025-04-29 08:00:53 +0000 |
commit | cf83c0b651790446c73dae29f68cec9e2ba6af9e (patch) | |
tree | 4176f416e3776b8cbf5a178839d1030e23467807 | |
parent | a2fda5c048f4f91f9558c0e162bd4451751d19aa (diff) |
QmlDesigner: Fix crash when switching to first .ui.qml file16.0
if Qt Creator is already in Design mode. QmlDesignerPlugin::showDesigner() was only called on a switch to Design mode while the editor is a .ui.qml file. So it wasn't called when opening a .ui file in Design mode and then switching to a .ui.qml file. But showDesigner() creates the QmlDesigner widgets, so it must be called. Fixes: QTCREATORBUG-32854 Change-Id: I02a498ce00fc1afdee900752ade7af6c62b787b7 Reviewed-by: Thomas Hartmann <thomas.hartmann@qt.io>
-rw-r--r-- | src/plugins/qmldesigner/designmodewidget.cpp | 5 | ||||
-rw-r--r-- | src/plugins/qmldesigner/designmodewidget.h | 2 | ||||
-rw-r--r-- | src/plugins/qmldesigner/qmldesignerplugin.cpp | 11 |
3 files changed, 16 insertions, 2 deletions
diff --git a/src/plugins/qmldesigner/designmodewidget.cpp b/src/plugins/qmldesigner/designmodewidget.cpp index 34183af8b26..3dea9e15762 100644 --- a/src/plugins/qmldesigner/designmodewidget.cpp +++ b/src/plugins/qmldesigner/designmodewidget.cpp @@ -651,6 +651,11 @@ void DesignModeWidget::setMinimumSizeHintFromContentMinimumSize(bool value) dockContainer->layout()->update(); } +bool DesignModeWidget::isInitialized() const +{ + return m_initStatus == Initialized; +} + void DesignModeWidget::dragEnterEvent(QDragEnterEvent *event) { event->accept(); diff --git a/src/plugins/qmldesigner/designmodewidget.h b/src/plugins/qmldesigner/designmodewidget.h index 881335da75c..38be692b109 100644 --- a/src/plugins/qmldesigner/designmodewidget.h +++ b/src/plugins/qmldesigner/designmodewidget.h @@ -75,6 +75,8 @@ public: void setMinimumSizeHintFromContentMinimumSize(bool value); + bool isInitialized() const; + signals: void navigationHistoryChanged(); void initialized(); diff --git a/src/plugins/qmldesigner/qmldesignerplugin.cpp b/src/plugins/qmldesigner/qmldesignerplugin.cpp index 61dfb8adf45..b0f7c7f0891 100644 --- a/src/plugins/qmldesigner/qmldesignerplugin.cpp +++ b/src/plugins/qmldesigner/qmldesignerplugin.cpp @@ -529,8 +529,15 @@ void QmlDesignerPlugin::hideDesigner() void QmlDesignerPlugin::changeEditor() { - clearDesigner(); - setupDesigner(); + if (d->mainWidget.isInitialized()) { + // showDesigner was already already called + clearDesigner(); + setupDesigner(); + } else { + // we are already in Design mode, but showDesigner wasn't called yet, + // so we need to call that to set up the widgets + showDesigner(); + } } void QmlDesignerPlugin::jumpTextCursorToSelectedModelNode() |