diff --git a/src/private/quick/DockWidgetQuick.cpp b/src/private/quick/DockWidgetQuick.cpp index 17611859..9a5f5255 100644 --- a/src/private/quick/DockWidgetQuick.cpp +++ b/src/private/quick/DockWidgetQuick.cpp @@ -13,6 +13,8 @@ #include #include +#include + /** * @file * @brief Represents a dock widget. @@ -62,8 +64,7 @@ void DockWidgetQuick::setWidget(const QString &qmlFilename) DockWidgetBase::setWidget(adapter); } -/* TODO_QUICK -bool DockWidget::event(QEvent *e) +bool DockWidgetQuick::event(QEvent *e) { if (e->type() == QEvent::ParentChange) { onParentChanged(); @@ -71,13 +72,9 @@ bool DockWidget::event(QEvent *e) onShown(e->spontaneous()); } else if (e->type() == QEvent::Hide) { onHidden(e->spontaneous()); + } else if (e->type() == QEvent::Close) { + onClosed(static_cast(e)); } - return QWidget::event(e); + return DockWidgetBase::event(e); } - -void DockWidget::closeEvent(QCloseEvent *e) -{ - onClosed(e); -} -*/ diff --git a/src/private/quick/DockWidgetQuick.h b/src/private/quick/DockWidgetQuick.h index 7e8edeca..aa4ffb0c 100644 --- a/src/private/quick/DockWidgetQuick.h +++ b/src/private/quick/DockWidgetQuick.h @@ -54,6 +54,9 @@ public: /// Similar to DockWidgetBase::setWidget(QQuickItem*) void setWidget(const QString &qmlFilename); +protected: + bool event(QEvent *e) override; + private: class Private; Private *const d; diff --git a/src/private/quick/QWidgetAdapter_quick.cpp b/src/private/quick/QWidgetAdapter_quick.cpp index a3c06fea..b45666f3 100644 --- a/src/private/quick/QWidgetAdapter_quick.cpp +++ b/src/private/quick/QWidgetAdapter_quick.cpp @@ -66,10 +66,20 @@ void QWidgetAdapter::itemChange(QQuickItem::ItemChange change, const QQuickItem: { QQuickItem::itemChange(change, data); - if (change == QQuickItem::ItemParentHasChanged) { - // Emulate the QWidget behaviour as QQuickItem doesn't emit parentChange event. + // Emulate the QWidget behaviour as QQuickItem doesn't receive some QEvents. + switch (change) { + case QQuickItem::ItemVisibleHasChanged: { QEvent ev(QEvent::ParentChange); event(&ev); + break; + } + case QQuickItem::ItemParentHasChanged: { + QEvent ev(isVisible() ? QEvent::Show : QEvent::Hide); + event(&ev); + break; + } + default: + break; } }