aboutsummaryrefslogtreecommitdiffstats
path: root/src/quicktemplates2/qquicktooltip.cpp
diff options
context:
space:
mode:
authorLiang Qi <liang.qi@qt.io>2016-08-23 07:50:52 +0200
committerLiang Qi <liang.qi@qt.io>2016-08-23 07:50:52 +0200
commit0524ddb9489cd9816fadc330f75efc7b40994013 (patch)
tree834607a15e646d416e2512f8f4a05ae222495de5 /src/quicktemplates2/qquicktooltip.cpp
parent2568869819863de6b1f303dfe470aedf38b841c3 (diff)
parent53c780f15c2d170514f74d949a8165033275bddd (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.cpp40
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);
}
/*!