fix: 修复从托盘拖动图标到任务栏引起崩溃的问题

将static_cast修改为dynamic_cast,增加了类型判断

Log:
Influence: 将托盘图标拖动到任务栏
Bug: https://pms.uniontech.com/bug-view-181945.html
Change-Id: I5b23088b8b7508d9a7cf2683a3a8571a57b82e38
This commit is contained in:
donghualin 2023-01-17 10:38:45 +08:00
parent 4800acce2c
commit a572f8a37d
2 changed files with 4 additions and 4 deletions

View File

@ -50,6 +50,4 @@ private:
bool m_useSourcePixmap;
};
Q_DECLARE_INTERFACE(QuickIconDrag, "QuickIconDrag")
#endif // QUICKDRAGCORE_H

View File

@ -320,7 +320,9 @@ bool QuickPluginWindow::eventFilter(QObject *watched, QEvent *event)
void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *event)
{
m_dragEnterMimeData = static_cast<QuickPluginMimeData *>(const_cast<QMimeData *>(event->mimeData()));
// 由于QuickPluginMimeData和QuickIconDrag的来源是pluginManager插件dock和插件中都使用了这两个类但是这个两个类
// 是各自编译的相当于编译了两份所以使用qobject_cast会导致转换失败因此此处使用dynamic_cast来保证转换成功
m_dragEnterMimeData = dynamic_cast<QuickPluginMimeData *>(const_cast<QMimeData *>(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<QuickIconDrag *>(m_dragEnterMimeData->drag());
QuickIconDrag *drag = dynamic_cast<QuickIconDrag *>(m_dragEnterMimeData->drag());
if (drag && !icon.isNull()) {
QPixmap pixmap = icon.pixmap(QSize(16, 16));
drag->updatePixmap(pixmap);