diff --git a/frame/drag/quickdragcore.cpp b/frame/drag/quickdragcore.cpp index d4325f57c..e1298f400 100644 --- a/frame/drag/quickdragcore.cpp +++ b/frame/drag/quickdragcore.cpp @@ -9,6 +9,7 @@ #include #include #include +#include QuickPluginMimeData::QuickPluginMimeData(PluginsItemInterface *item, QDrag *drag) : QMimeData() @@ -46,7 +47,7 @@ QuickIconDrag::QuickIconDrag(QObject *dragSource, const QPixmap &pixmap) connect(m_timer, &QTimer::timeout, this, &QuickIconDrag::onDragMove); m_timer->start(); - m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus); + m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowDoesNotAcceptFocus); m_imageWidget->setAttribute(Qt::WA_TransparentForMouseEvents); m_imageWidget->installEventFilter(this); useSourcePixmap(); @@ -64,7 +65,7 @@ void QuickIconDrag::updatePixmap(QPixmap pixmap) m_pixmap = pixmap; m_useSourcePixmap = false; - m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::WindowDoesNotAcceptFocus | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); + m_imageWidget->setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowDoesNotAcceptFocus | Qt::WindowStaysOnTopHint | Qt::X11BypassWindowManagerHint); m_imageWidget->setFixedSize(pixmap.size()); m_imageWidget->show(); m_imageWidget->raise(); @@ -74,7 +75,7 @@ void QuickIconDrag::updatePixmap(QPixmap pixmap) void QuickIconDrag::useSourcePixmap() { m_useSourcePixmap = true; - m_imageWidget->setFixedSize(m_sourcePixmap.size()); + m_imageWidget->setFixedSize(m_sourcePixmap.size() / qApp->devicePixelRatio()); m_imageWidget->show(); m_imageWidget->raise(); m_imageWidget->update(); diff --git a/frame/item/components/singlequickitem.cpp b/frame/item/components/singlequickitem.cpp index 695adf347..b75d66525 100644 --- a/frame/item/components/singlequickitem.cpp +++ b/frame/item/components/singlequickitem.cpp @@ -134,7 +134,7 @@ QPixmap SingleQuickItem::pixmap() const } } - return icon.pixmap(pixmapWidth, pixmapHeight); + return icon.pixmap(pixmapWidth / qApp->devicePixelRatio(), pixmapHeight / qApp->devicePixelRatio()); } QLabel *SingleQuickItem::findChildLabel(QWidget *parent, const QString &childObjectName) const diff --git a/frame/pluginadapter/pluginadapter.cpp b/frame/pluginadapter/pluginadapter.cpp index e987fc2ba..76c683215 100644 --- a/frame/pluginadapter/pluginadapter.cpp +++ b/frame/pluginadapter/pluginadapter.cpp @@ -178,7 +178,7 @@ QIcon PluginAdapter::icon(const DockPart &dockPart, DGuiApplicationHelper::Color // 如果图标为空,就使用itemWidget的截图作为它的图标,这种一般是适用于老版本插件或者没有实现v23接口的插件 QSize oldSize = itemWidget->size(); - itemWidget->setFixedSize(ICONWIDTH, ICONHEIGHT); + itemWidget->setFixedSize(ICONWIDTH / qApp->devicePixelRatio(), ICONHEIGHT / qApp->devicePixelRatio()); QPixmap pixmap = itemWidget->grab(); itemWidget->setFixedSize(oldSize); return pixmap; diff --git a/frame/window/quickpluginwindow.cpp b/frame/window/quickpluginwindow.cpp index bdd8f5ff1..7897f15d9 100644 --- a/frame/window/quickpluginwindow.cpp +++ b/frame/window/quickpluginwindow.cpp @@ -280,7 +280,13 @@ void QuickPluginWindow::dragEnterEvent(QDragEnterEvent *event) { m_dragEnterMimeData = const_cast(qobject_cast(event->mimeData())); if (m_dragEnterMimeData) { - QIcon icon = m_dragEnterMimeData->pluginItemInterface()->icon(DockPart::QuickShow); + PluginsItemInterface *plugin = m_dragEnterMimeData->pluginItemInterface(); + QIcon icon = plugin->icon(DockPart::QuickShow); + if (icon.isNull()) { + QWidget *widget = plugin->itemWidget(QuickSettingController::instance()->itemKey(plugin)); + if (widget) + icon = widget->grab(); + } QuickIconDrag *drag = qobject_cast(m_dragEnterMimeData->drag()); if (drag && !icon.isNull()) { QPixmap pixmap = icon.pixmap(QSize(16, 16));