diff --git a/frame/drag/quickdragcore.h b/frame/drag/quickdragcore.h index 4156a65cf..0eee58dc2 100644 --- a/frame/drag/quickdragcore.h +++ b/frame/drag/quickdragcore.h @@ -50,6 +50,4 @@ private: bool m_useSourcePixmap; }; -Q_DECLARE_INTERFACE(QuickIconDrag, "QuickIconDrag") - #endif // QUICKDRAGCORE_H diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index c8d7d600d..d3fffc94b 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -320,7 +320,9 @@ bool QuickPluginWindow::eventFilter(QObject *watched, QEvent *event) void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *event) { - m_dragEnterMimeData = static_cast(const_cast(event->mimeData())); + // 由于QuickPluginMimeData和QuickIconDrag的来源是pluginManager插件,dock和插件中都使用了这两个类,但是这个两个类 + // 是各自编译的,相当于编译了两份,所以使用qobject_cast会导致转换失败,因此,此处使用dynamic_cast来保证转换成功 + m_dragEnterMimeData = dynamic_cast(const_cast(event->mimeData())); if (m_dragEnterMimeData) { PluginsItemInterface *plugin = m_dragEnterMimeData->pluginItemInterface(); QIcon icon = plugin->icon(DockPart::QuickShow); @@ -329,7 +331,7 @@ void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *event) if (widget) icon = widget->grab(); } - QuickIconDrag *drag = qobject_cast(m_dragEnterMimeData->drag()); + QuickIconDrag *drag = dynamic_cast(m_dragEnterMimeData->drag()); if (drag && !icon.isNull()) { QPixmap pixmap = icon.pixmap(QSize(16, 16)); drag->updatePixmap(pixmap);