From 6e104465eb23f2c6e7fd587774f51909b6cce21f Mon Sep 17 00:00:00 2001 From: wangnengdeng Date: Tue, 4 Aug 2020 09:38:32 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E8=A7=A3=E5=86=B3"Remove"=E6=8F=90?= =?UTF-8?q?=E7=A4=BA=E6=AE=8B=E7=95=99=E5=9C=A8=E6=A1=8C=E9=9D=A2=E4=B8=8A?= =?UTF-8?q?=E7=9A=84=E9=97=AE=E9=A2=98?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 问题的原因是因为在拖拽Widget中使用了一个静态的提示”移除“对象,这个可能在一定条件下 出现没有消失的情况。因此将此弹出提示的Widget改成拖拽对象的成员变量,这样当拖拽对象 销毁时,弹出提示对象也会一并给清除,从而解决”移除“提示不消失的问题 Log: 拖动任务栏上的图标移动后,"Remove"提示仍残留在桌面上 Task: https://pms.uniontech.com/zentao/bug-view-40987.html Change-Id: I42d28c97e80b1cc1522d5a984d11a1a7a4f8eeef Reviewed-on: http://gerrit.uniontech.com/c/dde-dock/+/1065 Reviewed-by: fanpengcheng Reviewed-by: Reviewed-by: niecheng Tested-by: --- frame/item/components/appdragwidget.cpp | 16 ++++++++++------ frame/item/components/appdragwidget.h | 4 ++-- 2 files changed, 12 insertions(+), 8 deletions(-) diff --git a/frame/item/components/appdragwidget.cpp b/frame/item/components/appdragwidget.cpp index 91eb65df9..28083e3d1 100644 --- a/frame/item/components/appdragwidget.cpp +++ b/frame/item/components/appdragwidget.cpp @@ -23,7 +23,6 @@ #include "appdragwidget.h" #include -QPointer AppDragWidget::PopupWindow(nullptr); class AppGraphicsObject : public QGraphicsObject { public: @@ -70,7 +69,8 @@ AppDragWidget::AppDragWidget(QWidget *parent) : m_animOpacity(new QPropertyAnimation(m_object, "opacity", this)), m_animGroup(new QParallelAnimationGroup(this)), m_goBackAnim(new QPropertyAnimation(this, "pos", this)), - m_removeTips(new TipsWidget(this)) + m_removeTips(new TipsWidget(this)), + m_popupWindow(nullptr) { m_removeTips->setText(tr("Remove")); m_removeTips->setObjectName("AppRemoveTips"); @@ -84,8 +84,8 @@ AppDragWidget::AppDragWidget(QWidget *parent) : arrowRectangle->setShadowXOffset(0); arrowRectangle->setArrowWidth(18); arrowRectangle->setArrowHeight(10); - PopupWindow = arrowRectangle; - PopupWindow->setRadius(18); + m_popupWindow = arrowRectangle; + m_popupWindow->setRadius(18); m_scene->addItem(m_object); setScene(m_scene); @@ -114,6 +114,10 @@ AppDragWidget::AppDragWidget(QWidget *parent) : AppDragWidget::~AppDragWidget() { + if (m_popupWindow != nullptr) { + delete m_popupWindow; + m_popupWindow=nullptr; + } } void AppDragWidget::mouseMoveEvent(QMouseEvent *event) @@ -136,7 +140,7 @@ void AppDragWidget::dragMoveEvent(QDragMoveEvent *event) bool model = true; Dock::Position pos = Dock::Position::Bottom; - DockPopupWindow *popup = PopupWindow.data(); + DockPopupWindow *popup = m_popupWindow; if (isRemoveAble()) { QWidget *lastContent = popup->getContent(); if (lastContent) @@ -209,7 +213,7 @@ void AppDragWidget::dropEvent(QDropEvent *event) showRemoveAnimation(); AppItem *appItem = static_cast(event->source()); appItem->undock(); - PopupWindow->setVisible(false); + m_popupWindow->setVisible(false); } else { showGoBackAnimation(); } diff --git a/frame/item/components/appdragwidget.h b/frame/item/components/appdragwidget.h index 52f616bb0..9e9bc3d51 100644 --- a/frame/item/components/appdragwidget.h +++ b/frame/item/components/appdragwidget.h @@ -78,8 +78,8 @@ private: Dock::Position m_dockPosition; QRect m_dockGeometry; QPoint m_originPoint; - Dock::TipsWidget * m_removeTips; - static QPointer PopupWindow; + Dock::TipsWidget *m_removeTips; + DockPopupWindow *m_popupWindow; /** * @brief m_distanceMultiple: 倍数 * dock栏上应用区驻留应用被拖拽远离dock的距离除以dock的宽或者高(更小的一个)的比值