diff options
author | Liang Qi <liang.qi@qt.io> | 2016-08-23 07:50:52 +0200 |
---|---|---|
committer | Liang Qi <liang.qi@qt.io> | 2016-08-23 07:50:52 +0200 |
commit | 0524ddb9489cd9816fadc330f75efc7b40994013 (patch) | |
tree | 834607a15e646d416e2512f8f4a05ae222495de5 /src/quicktemplates2/qquicktooltip.cpp | |
parent | 2568869819863de6b1f303dfe470aedf38b841c3 (diff) | |
parent | 53c780f15c2d170514f74d949a8165033275bddd (diff) |
Merge remote-tracking branch 'origin/5.7' into 5.8
Conflicts:
src/imports/controls/material/qquickmaterialstyle.cpp
src/imports/controls/universal/qquickuniversalstyle.cpp
src/quicktemplates2/qquickpopup_p_p.h
src/quicktemplates2/qquicktooltip.cpp
tests/auto/auto.pro
Change-Id: I88b347dd85278e14f7b2ca468e30648c6432b6f2
Diffstat (limited to 'src/quicktemplates2/qquicktooltip.cpp')
-rw-r--r-- | src/quicktemplates2/qquicktooltip.cpp | 40 |
1 files changed, 27 insertions, 13 deletions
diff --git a/src/quicktemplates2/qquicktooltip.cpp b/src/quicktemplates2/qquicktooltip.cpp index 6b51de95..e49d68a4 100644 --- a/src/quicktemplates2/qquicktooltip.cpp +++ b/src/quicktemplates2/qquicktooltip.cpp @@ -320,19 +320,27 @@ public: QQuickToolTip *QQuickToolTipAttachedPrivate::instance(bool create) const { - static QPointer<QQuickToolTip> tip; + QQmlEngine *engine = qmlEngine(parent); + if (!engine) + return nullptr; + + static const char *name = "_q_QQuickToolTip"; + + QQuickToolTip *tip = engine->property(name).value<QQuickToolTip *>(); if (!tip && create) { // TODO: a cleaner way to create the instance? QQml(Meta)Type? - QQmlContext *context = qmlContext(parent); - if (context) { - QQmlComponent component(context->engine()); - component.setData("import QtQuick.Controls 2.1; ToolTip { }", QUrl()); - - QObject *object = component.create(context); - tip = qobject_cast<QQuickToolTip *>(object); - if (!tip) - delete object; - } + QQmlComponent component(engine); + component.setData("import QtQuick.Controls 2.1; ToolTip { }", QUrl()); + + QObject *object = component.create(); + if (object) + object->setParent(engine); + + tip = qobject_cast<QQuickToolTip *>(object); + if (!tip) + delete object; + else + engine->setProperty(name, QVariant::fromValue(object)); } return tip; } @@ -366,8 +374,8 @@ void QQuickToolTipAttached::setText(const QString &text) d->text = text; emit textChanged(); - if (QQuickToolTip *tip = d->instance(true)) - tip->setText(text); + if (isVisible()) + d->instance(true)->setText(text); } /*! @@ -392,6 +400,9 @@ void QQuickToolTipAttached::setDelay(int delay) d->delay = delay; emit delayChanged(); + + if (isVisible()) + d->instance(true)->setDelay(delay); } /*! @@ -416,6 +427,9 @@ void QQuickToolTipAttached::setTimeout(int timeout) d->timeout = timeout; emit timeoutChanged(); + + if (isVisible()) + d->instance(true)->setTimeout(timeout); } /*! |