diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp index f0e7b867251..ddf33ad32d9 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp +++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.cpp @@ -46,7 +46,6 @@ #include #include #include -#include namespace QmlDesigner { @@ -248,43 +247,45 @@ bool NavigatorTreeView::viewportEvent(QEvent *event) QVariantMap imgMap = navModel->data(index, ToolTipImageRole).toMap(); if (!imgMap.isEmpty()) { - m_previewToolTipRow = index.row(); - if (!m_previewToolTip) { - m_previewToolTip = new PreviewToolTip(QApplication::activeWindow()); - connect(navModel, &NavigatorTreeModel::toolTipPixmapUpdated, - [this](const QString &id, const QPixmap &pixmap) { - if (m_previewToolTip && m_previewToolTip->id() == id) - m_previewToolTip->setPixmap(pixmap); - }); + m_previewToolTipNodeId = index.internalId(); + if (!m_previewToolTip || devicePixelRatioF() != m_previewToolTip->devicePixelRatioF()) { + if (!m_previewToolTip) { + connect(navModel, &NavigatorTreeModel::toolTipPixmapUpdated, + [this](const QString &id, const QPixmap &pixmap) { + if (m_previewToolTip && m_previewToolTip->id() == id) + m_previewToolTip->setPixmap(pixmap); + }); + } else { + delete m_previewToolTip; + } + m_previewToolTip = new PreviewToolTip(); } m_previewToolTip->setId(imgMap["id"].toString()); m_previewToolTip->setType(imgMap["type"].toString()); m_previewToolTip->setInfo(imgMap["info"].toString()); m_previewToolTip->setPixmap(imgMap["pixmap"].value()); - m_previewToolTip->move(m_previewToolTip->parentWidget()->mapFromGlobal(helpEvent->globalPos()) - + offset); + m_previewToolTip->move(helpEvent->globalPos() + offset); if (!m_previewToolTip->isVisible()) m_previewToolTip->show(); } else if (m_previewToolTip) { m_previewToolTip->hide(); - m_previewToolTipRow = -1; + m_previewToolTipNodeId = -1; } } } else if (event->type() == QEvent::Leave) { if (m_previewToolTip) { m_previewToolTip->hide(); - m_previewToolTipRow = -1; + m_previewToolTipNodeId = -1; } } else if (event->type() == QEvent::HoverMove) { - if (m_previewToolTip) { + if (m_previewToolTip && m_previewToolTip->isVisible()) { auto *he = static_cast(event); QModelIndex index = indexAt(he->pos()); - if (!index.isValid() || index.row() != m_previewToolTipRow) { + if (!index.isValid() || index.internalId() != m_previewToolTipNodeId) { m_previewToolTip->hide(); - m_previewToolTipRow = -1; + m_previewToolTipNodeId = -1; } else { - m_previewToolTip->move(m_previewToolTip->parentWidget()->mapFromGlobal(mapToGlobal(he->pos())) - + offset); + m_previewToolTip->move(mapToGlobal(he->pos()) + offset); } } } diff --git a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h index 201a4489f0a..227746e207d 100644 --- a/src/plugins/qmldesigner/components/navigator/navigatortreeview.h +++ b/src/plugins/qmldesigner/components/navigator/navigatortreeview.h @@ -42,6 +42,6 @@ public: private: PreviewToolTip *m_previewToolTip = nullptr; - int m_previewToolTipRow = -1; + qint32 m_previewToolTipNodeId = -1; }; } diff --git a/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp b/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp index 83d8ee44993..800104bfb30 100644 --- a/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp +++ b/src/plugins/qmldesigner/components/navigator/previewtooltip.cpp @@ -36,8 +36,8 @@ PreviewToolTip::PreviewToolTip(QWidget *parent) : QWidget(parent) , m_ui(new Ui::PreviewToolTip) { - setAttribute(Qt::WA_TransparentForMouseEvents); - setWindowFlags(Qt::Widget); + setWindowFlags(Qt::FramelessWindowHint | Qt::Tool | Qt::WindowTransparentForInput + | Qt::WindowStaysOnTopHint | Qt::WindowDoesNotAcceptFocus); m_ui->setupUi(this); m_ui->idLabel->setElideMode(Qt::ElideLeft); m_ui->typeLabel->setElideMode(Qt::ElideLeft);